Python 如何为sum列创建具有不同颜色范围的热图?

Python 如何为sum列创建具有不同颜色范围的热图?,python,matplotlib,seaborn,heatmap,Python,Matplotlib,Seaborn,Heatmap,我的pd数据框准备好了 Communication Services Consumer Discretionary Consumer Staples Energy Financials Health Care Industrials Materials Real Estate Technology Utilities Sum Date

我的pd数据框准备好了

            Communication Services  Consumer Discretionary  Consumer Staples  Energy  Financials  Health Care  Industrials  Materials  Real Estate  Technology  Utilities  Sum
Date                                                                                                                                                                          
2020-09-15  61                      65                      39                3       36          53           68           89         74           43          53         584
2020-09-14  50                      70                      39                7       54          45           67           92         64           28          53         569
2020-09-11  38                      54                      30                0       28          27           46           82         25           18          28         376
2020-09-10  30                      52                      24                0       16          19           30           67         32           12          25         307
2020-09-09  50                      57                      36                0       33          30           52           71         51           30          42         452
2020-09-08  34                      55                      21                0       24          16           24           46         48           12          25         305
2020-09-04  53                      59                      51                3       66          32           47           71         74           35          28         519
2020-09-03  57                      67                      57                0       48          40           49           82         80           52          32         564
2020-09-02  73                      85                      78                3       80          74           94           89         87           94          64         821
2020-09-01  69                      78                      54                3       54          51           79           85         51           77          14         615
2020-08-31  76                      73                      78                7       50          61           75           64         54           70          21         629
2020-08-28  92                      81                      75                30      81          48           86           89         77           76          17         752
2020-08-27  88                      77                      81                11      83          53           82           82         70           64          14         705
2020-08-26  92                      81                      75                11      46          43           79           89         45           69          7          637
2020-08-25  92                      86                      78                23      65          45           82           82         64           64          21         702
2020-08-24  92                      88                      90                38      62          38           90           75         54           61          39         727
2020-08-21  80                      78                      69                11      28          37           71           50         45           49          17         535
2020-08-20  84                      72                      63                11      34          45           78           57         45           57          17         563
2020-08-19  80                      83                      81                34      48          56           84           71         29           60          35         661
2020-08-18  88                      88                      90                53      48          62           91           71         70           64          42         767
2020-08-17  80                      95                      87                80      69          62           94           78         77           63          42         827
2020-08-14  84                      100                     90                80      83          56           94           78         64           57          42         828
2020-08-13  88                      98                      87                69      81          56           95           78         64           66          57         839
2020-08-12  73                      96                      87                96      83          58           98           75         90           63          64         883
2020-08-11  73                      86                      72                84      89          50           95           78         77           53          46         803
2020-08-10  80                      93                      87                88      83          53           93           78         90           64          82         891
2020-08-07  69                      81                      84                65      84          58           91           60         83           71          89         835
2020-08-06  73                      80                      81                73      60          53           84           57         54           78          67         760
2020-08-05  69                      81                      87                73      68          69           89           64         51           78          64         793
2020-08-04  80                      63                      87                73      46          66           64           53         67           81          85         765
2020-08-03  69                      55                      78                50      60          74           68           42         51           81          78         706
2020-07-31  65                      62                      78                42      60          61           64           46         58           74          92         702
2020-07-30  65                      62                      75                34      65          74           71           50         64           61          89         710
2020-07-29  73                      78                      90                88      90          87           79           85         70           64          85         889
2020-07-28  46                      67                      81                38      71          72           78           85         61           47          89         735
2020-07-27  61                      78                      90                61      86          75           76           96         32           74          75         804
2020-07-24  80                      77                      87                73      87          72           83           100        32           56          96         843
2020-07-23  84                      81                      90                73      90          85           91           100        38           73          96         901
2020-07-22  88                      90                      90                84      92          93           94           100        45           90          96         962
2020-07-21  76                      91                      93                96      92          93           93           100        25           85          92         936
2020-07-20  65                      81                      81                34      62          91           84           96         32           87          89         802
2020-07-17  76                      86                      93                38      65          95           91           96         51           77          100        868
2020-07-16  80                      90                      93                50      81          93           89           96         22           70          85         849
2020-07-15  80                      96                      87                53      78          95           91           96         45           76          75         872
2020-07-14  69                      59                      81                23      53          82           73           96         25           60          82         703
2020-07-13  57                      34                      69                0       46          54           56           71         9            43          75         514
2020-07-10  61                      44                      66                0       43          59           39           60         35           66          64         537
2020-07-09  46                      31                      42                0       18          61           36           32         32           61          46         405
2020-07-08  50                      42                      57                3       34          67           50           46         25           61          57         492
2020-07-07  53                      34                      60                0       18          66           43           75         22           50          46         467
2020-07-06  50                      52                      54                7       30          75           64           89         41           76          53         591

现在我想用matplotlib绘制一张热图。生成的热图应如下所示:

对于内部部分(除“总和”之外的列),如果值大于50,则颜色应为绿色,对于最大值,颜色应更暗。对于低于50的值,逻辑相同

对于“总和”列,阈值为550。如何实现颜色的渐变

plt.figure(figsize=(15, 15))
sns.heatmap(data, annot=True, cmap="YlGnBu", linewidths=.5)

这就是你要找的吗。
此外,如果您想在值上添加范围,可以使用vmin、vmax参数。

A
sns。发散调色板(20145)
标准在中间有白色。红色的可能色调值为
20
,绿色的可能色调值为
145

vmin=
然后将设置对应于红色的数值,并将对应于绿色的数值设置为
vmax=
。中间的值将为白色

您需要创建两个单独的热图,因为它们具有不同的颜色范围。
ax=
关键字告诉您应该在哪个子地块上创建热图。色条可以省略:单元格内的数字已经表示对应关系

标签名称中的换行符有助于更好地使用可用空间

从matplotlib导入pyplot作为plt
导入seaborn作为sns
作为pd进口熊猫
#df=pd.read\u csv(…)
#df.set_索引('Date',inplace=True)
column_labels=[col.replace(''''\n'),用于df.columns[:-1]]
图(ax1,ax2)=plt.子批次(ncols=2,figsize=(12,10),
gridspec_kw={'width_ratio':[10,1],'wspace':0.02,'bottom':0.14})
cmap=sns.发散调色板(20145)
sns.heatmap(df[df.columns[:-1]],cmap=cmap,vmin=0,vmax=100,annot=True,fmt='.0f',annot_-kws={'fontsize':10},
lw=0.6,xticklabels=column_标签,cbar=False,ax=ax1)
sns.heatmap(df[df.columns[-1:][],cmap=cmap,vmin=0,vmax=1100,annot=True,fmt='.0f',annot_-kws={'fontsize':10},
lw=0.6,yticklabels=[],cbar=False,ax=ax2)
ax2.设置标签(“”)
ax2.勾选参数(轴=x',标签旋转=90)
plt.show()

谷歌seaborn热图。我发现它比matplotlib更容易使用,而且它的外观也更好。你想绘制热图还是仅仅绘制热图?我现在只有数据框。我想绘制一张热图,并像上面的图片一样设置图表的样式。我需要使用不同的规则设置“Sum”列和其他列的样式。改变颜色的第一个阈值是50,而第二个阈值是550。我认为sum列丢失了,我没有找到GreenWhiteRed选项。你知道如何调整吗?如果你想包括sum,你也可以这样做,但在那种情况下,如果你使用vmin,vmax,它对你没有用处,因为sum通常有更高的值,然后是单个值,大多数热图看起来会褪色。是的。我在热图中添加了
square=True
,如何调整正方形的大小使其更大?我仍然想知道我的表是否包含100行,如何将它们放入图像中@johance增加
figsize
将使绘图变大。您还可以创建一个包含前半部分数据的绘图,另一个包含后半部分数据的绘图。或者一个月一块地?设置
square=True
将有一个缺点,即单元格太窄,无法包含文本,并且使“sum”子批次更难接近主子批次。是否有其他更好的方法来调整单元格比率?我只是想让细胞“更高”。我看到了你提到的缺点。默认情况下,单元格的宽度和高度会进行调整,以使所有内容都符合图形。因此,你可以使图形更窄和/或更高,以获得“更高”单元格的效果。我想我通过更改
figsize
中的参数来增加图像高度,但图像仍然保持不变。请看一下: