簡體   English   中英

使用pandas.Dataframe.plot將條形圖的顏色調整為紅色(負色)和綠色(正色)

[英]Adjust bar subplots colors to red (negative) and green(positive) using pandas.Dataframe.plot

我正在使用pd.DataFrame.plot()可視化多個品牌之間的%YoY變化。 我不確定如何訪問每個子圖並將> = 0的值設置為綠色,<0的值設置為紅色。 我想避免不得不在無花果,斧頭中拆分代碼。 想知道是否有一種方法可以將其包含在df.plot()的參數中。

data= {'A': [np.nan, -0.5, 0.5], 
       'B': [np.nan, 0.3, -0.3],
       'C': [np.nan, -0.7, 0.7],
       'D': [np.nan, -0.1, 1]}
df = pd.DataFrame(data=data, index=['2016', '2017', '2018'])`
df.plot(kind='bar', subplots=True, sharey=True, layout=(2,2), legend=False,
        grid=False, colormap='RdBu')

我嘗試使用顏色圖,但是它不會將各個條設置為不同的顏色,而是將每個子圖設置為不同的顏色。 我確定我想念什么。 任何幫助表示贊賞。

2x2子圖的示例

您可以使用以下策略:

  • 使用sharey=True使用matplotlib創建具有子圖的圖形對象
  • 循環遍歷DataFrame列,並將綠色/紅色分配給該值, 如此答案所示
  • 傳遞給定的子圖以使用ax=ax繪制特定列

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

fig, axes = plt.subplots(ncols=3, sharey=True)

data= {'A': [np.nan, -0.5, 0.5], 
       'B': [np.nan, 0.3, -0.3],
       'C': [np.nan, -0.7, 0.7]}
df = pd.DataFrame(data=data, index=['2016', '2017', '2018'])

for ax, col in zip(axes, df.columns):
    df[col].plot(kind='bar', color=(df[col] > 0).map({True: 'g', False: 'r'}), ax=ax)
    ax.set_title(col)
plt.show()

在此處輸入圖片說明

解決如下

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

fig, axes = plt.subplots(nrows=2, ncols=2, sharey=True)

data= {'A': [np.nan, -0.5, 0.5], 
       'B': [np.nan, 0.3, -0.3],
       'C': [np.nan, -0.7, 0.7],
       'D': [np.nan, -1, 1]}
df = pd.DataFrame(data=data, index=['2016', '2017', '2018'])

for i, col in enumerate(df.columns):
     df[col].plot(kind='bar', color=(df[col] > 0).map({True: 'g', False: 'r'}), 
     ax=axes[i // 2][i % 2], sharex=True, sharey=True, grid=False)
axes[i // 2][i % 2].set_title(col)
plt.show()

解決方案示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM