如何修改seaborn热图?

问题描述 投票:0回答:1

我正在尝试使用以下代码在 Python 中创建热图:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

# Replace 'your_file.csv' with the actual path to your CSV file
#file_path = 'NE_EBA_plants.csv'
file_path = 'small_test.csv'

# Read the CSV file into a DataFrame
df = pd.read_csv(file_path)


quantity_mapping = {"0": 0, "x": 1, "xx": 2, "xxx": 3, "xxxx": 4}
df["Quantity"] = df["Semi_Quantitative"].map(quantity_mapping)
df.to_csv("my_data.csv", index=False)

# Pivot the DataFrame to create a matrix for visualization
df = df.groupby(['Site', 'Species_Sum']).agg({'Quantity': 'sum'}).reset_index()


pivot_df = df.pivot(index="Site", columns="Species_Sum", values="Quantity").fillna(0)
pivot_df.to_csv("my_data2.csv", index=False)
# Create a heatmap
plt.figure(figsize=(10, 6))
sns.heatmap(pivot_df, annot=True, cmap="YlGnBu", linewidths=0.5, cbar=True)
plt.title("Species Distribution Across Sites")
plt.xlabel("Species")
plt.ylabel("Site")
plt.show()

这会导致:

Heatmap with 2 entries

正如您在图像中所看到的,(除了名称被切断或比例连续等明显问题(当它实际上是分类时))最让我烦恼的是热图中显示的数字。如果总共有 5 个站点,则显示 5 个数字,如果是 1 个站点,则仅显示 1 个,依此类推。最重要的是,如果有人能告诉我它们为什么出现以及如何删除它们,那就太棒了!

这是另一张图片,有更多条目和相同的问题:

Heatmap with 5 entries

small_test 的 csv 看起来像这样:

Site,Species_Sum,Semi_Quantitative
"Djursland, Selkær 3-aisled",Camelina sativa,x
"Djursland, Selkær 3-aisled",Hordeum vulgare,x
"Djursland, Selkær 3-aisled",Hordeum nudum,x
"Djursland, Selkær 3-aisled",Hordeum vulgare (hulled),0
"Djursland, Selkær 3-aisled",Panicum miliaceum,x
"Djursland, Selkær 3-aisled",Triticum aestivum,0
"Djursland, Selkær 3-aisled",Triticum dicoccum,0
"Djursland, Selkær 3-aisled",Triticum monococcum,0
"Djursland, Selkær 3-aisled",Triticum spelta,0
Glesborg (ploughsoil),Camelina sativa,x
Glesborg (ploughsoil),Hordeum vulgare,x
Glesborg (ploughsoil),Hordeum nudum,x
Glesborg (ploughsoil),Hordeum vulgare (hulled),0
Glesborg (ploughsoil),Panicum miliaceum,x
Glesborg (ploughsoil),Triticum aestivum,0
Glesborg (ploughsoil),Triticum dicoccum,0
Glesborg (ploughsoil),Triticum monococcum,0
Glesborg (ploughsoil),Triticum spelta,0

代码本身源于ChatGPT,因为我是一个白痴程序员。我也尝试用这个来解决它,但也许我解释得不够好,它只是在这一点上一直在循环,实际的问题永远不会得到解决,除非第一个输入行被放入 NAN 值并且从而在这个过程中完全删除...

我已经尝试过使用不同的 csv,因为我最初认为我的数据存在问题,例如删除所有不必要的列,但这并没有帮助。

python seaborn heatmap
1个回答
0
投票

我还发现了许多其他关于此问题的帖子,并且它来自 annot=True 参数。如果您不需要

annot=True
,您可以通过删除它来解决该问题。除此之外,我无法找到参数 fmt 的值,这解决了您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.