我有这样的数据,我想绘制一个热图,例如数据:
ID Year A B C
ID1 1971 5 100 0.5
ID1 1972 6 102 0.4
ID1 1981 4 101 0.6
ID1 1991 5 103 0.5
ID1 1993 2 104 0.4
ID2 1971 4 100 0.9
ID2 1973 4 108 0.8
ID2 1981 5 109 0.7
ID2 1991 3 106 0.6
ID2 1993 3 103 0.5我试图用平地绘制一个热图,但图中只显示了50个y坐标。我的数据包含大约10.000个唯一ID:
import plotly.graph_objects as go
import pandas as pd
df = pd.read_csv("my_data.csv")
fig = go.Figure(data=go.Heatmap(
z=df['B'],
x=df['Year'],
y=df['ID'],
colorscale='Viridis'))
fig.write_html("test.html")如何绘制整个数据集?
发布于 2022-09-28 08:34:02
对于热图,z应该是一个二维数组,但是你只给出一个一维的级数,所以可能会有一些不匹配。也许您可以在绘制之前进行一些整形,例如创建一个大小合适的矩阵,并根据您的数据集更新每个元素的值。不过,要注意缺少的价值。这里需要些体力活。
发布于 2022-09-28 09:20:27
import plotly.graph_objects as go
import pandas as pd
import io
import numpy as np
# df = pd.read_csv("my_data.csv")
df = pd.read_csv(
io.StringIO(
"""ID Year A B C
ID1 1971 5 100 0.5
ID1 1972 6 102 0.4
ID1 1981 4 101 0.6
ID1 1991 5 103 0.5
ID1 1993 2 104 0.4
ID2 1971 4 100 0.9
ID2 1973 4 108 0.8
ID2 1981 5 109 0.7
ID2 1991 3 106 0.6
ID2 1993 3 103 0.5"""
),
sep="\s+",
)
# bulk up sample data to 1000 IDs
df = pd.concat(
[
df.assign(
ID=np.repeat([f"ID{i+1}", "ID{i+2}"], len(df) // 2),
B=np.random.randint(df["B"].min(), df["B"].max(), len(df)),
)
for i in range(1000)
]
)
fig = go.Figure(
data=go.Heatmap(z=df["B"], x=df["Year"], y=df["ID"], colorscale="Viridis")
)
fig

发布于 2022-09-28 11:53:37
随着热图大小的增加,现在显示所有ID:
fig.update_layout(title="Correlation heatmap",
yaxis={"title": 'Test'},
height=10000,
xaxis={"title": 'Test',"tickangle": 13000} )https://stackoverflow.com/questions/73878190
复制相似问题