python - 使用 pandas.Dataframe.plot 将条形子图颜色调整为红色(负)和绿色(正)

标签 python pandas matplotlib subplot

我使用 pd.DataFrame.plot() 可视化多个品牌的同比变化百分比。我不确定如何访问每个单独的子图并将值 >=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')

我尝试过使用颜色图,但它没有将各个条设置为不同的颜色,而是设置每个子图。我确信我错过了一些东西。任何帮助表示赞赏。

Example of 2x2 subplots

最佳答案

您可以使用以下策略:

  • 使用 sharey=True 使用 matplotlib 创建带有子图的图形对象
  • 循环 DataFrame 列并将绿色/红色分配给值,如 this 中所示回答
  • 使用 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()

enter image description here

关于python - 使用 pandas.Dataframe.plot 将条形子图颜色调整为红色(负)和绿色(正),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56631193/

相关文章:

python - 如何修复重叠的注释/文本

python - 在单个项目中重用 Django 应用程序

Python 百分比格式字符串,% 之前有空格

指向结果的 Python 字符串比较

python - 如何对每行都有列表的数据帧进行单热编码

pandas - 遍历 Pandas 中的行和列

python - 具有多个常用选项的命令使用自定义装饰器进入一个参数

python - 如何根据另一列 B 的值替换 pandas 数据框列 A 的值

python - 在 Python OpenCV 中创建 FlowMap

python - matplotlib:在堆叠散点图中对齐 y 轴标签