首页 > 解决方案 > 可以将这种特定的“外观”应用于 matplotlib 条形图吗?

问题描述

我正在寻找有关将我的数据从 pandas 数据框中获取到 matplotlib 图表的提示,该图表如下所示: 格式化图表示例

甚至可以不用太多努力吗?

提前感谢您的任何建议!

标签: pythonmatplotlibdata-visualization

解决方案


可以使用以下功能:

  • 使用 pandas 生成标准条形图df.plot.bar()
  • 循环遍历生成的条形以更改它们的颜色和 alpha。还可以使用栏的尺寸来放置带有高度的文本。
  • 移除除底部脊椎之外的所有脊椎。
  • 更改底部书脊的线宽。
  • 用于grid()放置水平网格线。
  • 用于tick_params()删除刻度线并更改刻度标签颜色和大小。y 刻度无法移除,因为它们是定位网格线所必需的。
from matplotlib import pyplot as plt
import numpy as np
import pandas as pd

df = pd.DataFrame({'Values': [40, 55, 60, 94, 79, 49]},
                  index=['January', 'February', 'March', 'April', 'May', 'June'])
colors = plt.cm.tab10.colors[:len(df)]
ax = df.plot.bar(width=0.9, legend=False)
for p, color in zip(ax.patches, colors):
    p.set_color(color)
    p.set_alpha(0.6)
    ax.text(p.get_x() + p.get_width() / 2, p.get_y() + p.get_height() / 2, f'{p.get_height():.0f}', ha='center',
            va='center', fontsize=20)
ax.grid(axis='y')
for where in ['left', 'right', 'top']:
    ax.spines[where].set_visible(False)
ax.spines['bottom'].set_linewidth(3)
ax.tick_params(axis='y', length=0, labelcolor='none')
ax.tick_params(axis='x', length=0, rotation=0, labelsize=14)
plt.tight_layout()
plt.show()

结果图

PS:如果你需要更多类似灰色的颜色,你可以先让它们变暗:

colors = [(r*0.6, g*0.6, b*0.6) for r, g, b in colors]

并且仍然使用 alpha ( 0.5?) 使它们再次变白。

灰度图


推荐阅读