如何在python中用大数据集绘制热图

如何在python中用大数据集绘制热图,python,pandas,matplotlib,dataset,seaborn,Python,Pandas,Matplotlib,Dataset,Seaborn,我试图绘制一个正弦波,曲线在每个点的颜色由它的切线斜率值表示。 例如,应填写3600*1000数据框: x_axis = list(range(0, 3601)) y_axis = list(range(-1000, 1001)) wave = pd.DataFrame(index = y_axis,columns= x_axis ) for i in range(0, 3601, 1): y = int(round(np.sin(np.radians(i / 10)), 3) * 10

我试图绘制一个正弦波,曲线在每个点的颜色由它的切线斜率值表示。 例如,应填写
3600*1000
数据框:

x_axis = list(range(0, 3601))
y_axis = list(range(-1000, 1001))
wave = pd.DataFrame(index = y_axis,columns= x_axis )
for i in range(0, 3601, 1):
    y = int(round(np.sin(np.radians(i / 10)), 3) * 1000)
    wave.loc[y, i] = -abs(y)
wave = wave.fillna(0)
wave[wave == 0] =np.nan
seaborn.heatmap(wave)
通过使用seaborn.heatmap(wave),热图将像附加图像一样生成。但是我想要的是在一张图片中画出50-100个正弦波,所以数据帧的大小会大很多,达到360000*10000。对于这种大小的数据帧,我仍然希望显示类似的热图,或者任何可以表示每个单元格值变化的类型或图形。通过使用seaborn热图和此数据集,我的工作站似乎冻结了

我的一些想法是将所有值标准化为
0-255
,并使用一些GLV绘图功能,我仍在研究它


您可以使用
plt.scatter
创建类似的绘图:

导入matplotlib.pyplot作为plt
将numpy作为np导入
x_轴=np.arange(0,360,0.1)
y=np.圆形(np.sin(np.弧度(x_轴)),3)*1000
plt.散射(x_轴,y,c=-np.abs(y),s=1,cmap='gist_heat')
plt.show()

要获得更宽的曲线,只需增加
s
。要去除颜色贴图的白色部分,可以移动颜色限制(称为
vmin
vmax
)。它们是给定颜色值的最小值和最大值。在这种情况下,最大值为0,最小值为-1000。将
vmax
设置为+100将省略10%的颜色范围

plt.scatter(x_轴,y,c=-np.abs(y),vmax=0.1*y.max(),s=10,cmap='gist_heat')

从来没有这样想过。看起来pyplot有很多颜色选项。非常感谢你的帮助!!!还有一个问题要跟进。如果我需要增加线条的宽度——非常宽,你可以期望线条有一些重叠,因为线条太宽了。对于覆盖区域,线条颜色需要更暗。我想在图像中表示这一点。我发现散点图是用点来表示的,我可能还要回去选择数据框和热图。我说得对吗?你有更多的建议吗?非常感谢。我真的认为热图不合适。您可以使用
s=1
参数增加散射点的宽度(
s
的面积类似于:要使直径加倍,需要将
s
增加四倍)。对于这个应用程序,创建数据帧的速度非常慢,您可以使用numpy阵列获得相同的热图(seaborn对它们很满意)。但如此大的热图总是缓慢且质量差。使用颜色限制(vmin和vmax)的一些技巧可以帮助轻松去除颜色贴图的白色部分。散点图的另一种替代方法是绘制线段,如中所示。它稍微复杂一点,但是你可以更自由地增加线宽。在我将线宽增加到32后,绘图似乎非常接近我要找的。谢谢你帮我解决这个问题:)