python - 可以将这种特定的“外观”应用于 matplotlib 条形图吗?
解决方案
可以使用以下功能:
- 使用 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
?) 使它们再次变白。
推荐阅读
- php - 致命错误:未捕获的错误:在 bool 上调用成员函数 RowCount()
- python - 排列中间数组长度为 M 的 N 个列表的所有可能性
- mysql - 插入空值
- excel - 从 excel 2016 到 2013 的数据透视表创建
- javascript - export default { foo, bar } 在带有 babel 的 node.js 中不起作用
- c# - C# - 使用 ZXing.Net 解码 png QR 码
- mysql - 识别 MySQL 脚本中的外键
- c# - 如何将球体放置在两点之间的半圆形中
- python - 使用子字符串切片构建正则表达式
- php - 如何获取数组的所有唯一组合,包括空格(项目顺序不相关)