python - matplotlib python,如何设置不同颜色和名称的不同块
问题描述
import numpy as np
from matplotlib import pyplot as plt
data = {'Mon':(0,0.5), 'Tue': (0.7,1), 'Wen': (0.1,0.3), 'Th': (0.3,0.4)
,'Fri':(0.1,0.2),'Sat':(0.1,0.4),'Sun':(0,0)
}
width = 0.5
fig, ax = plt.subplots()
for i, values in enumerate(data.values()):
ymin, ymax = values
ax.axvspan(xmin=i-width/2, xmax=i+width/2, ymin=ymin,ymax=ymax)
ax.grid(True)
#add ticks
ax.set_xticks(np.arange(0,len(data)))
ax.set_xticklabels(data.keys())
ax.set_yticks(np.arange(0,37))
time_list = [
'6:00','6:30','7:00','7:30',
'8:00','8:30','9:00','9:30',
'10:00','10:30','11:00','11:30',
'12:00','12:30','13:00','13:30',
'14:00','14:30','15:00','15:30',
'16:00','16:30','17:00','17:30',
'18:00','18:30','19:00','19:30',
'20:00','20:30','21:00','21:30',
'22:00','22:30','23:00','23:30',
'24:00',
]
ax.set_yticklabels(x for x in time_list)
plt.show()
你好 !谁能告诉我如何在 pyplot 中设置具有不同颜色和名称的不同块?
例如: Block 1 : Mon 6:00-15:00 (color red , name: Accounting 1), Block 2: Tue 18:30-24:00 ( color 黄色 , name: Spanish 2)
我已经通过使用“plt.bar”函数和文档中的许多其他方法尝试了几种方法,但它们没有工作,我可能做错了什么,有人可以帮忙吗?
上面是代码,我也包括了当前的输出 img。
解决方案
您可以将颜色参数传递给ax.axvspan()
并用于ax.text()
设置任意标签。我只会显示我进行更改的那部分代码。
编辑:默认情况下采用的位置坐标ax.text()
是数据坐标。因此,我们可以对用于绘制矩形的 x 坐标使用相同的值。对于 y 坐标,我们必须将值从 [0, 1] 区间转换为数据网格。由于我们有 (24 - 6) * 2 = 36 条网格线,这就是转换因子。给予或采取一些补偿。为了使标签保持在网格内,我们可以区分大小写,如果矩形上方没有空间,则将标签绘制在矩形下方。
colors = ['red', 'yellow', 'gray', 'gray', 'gray', 'gray', 'gray']
labels = ['Accounting 1', 'Spanish 2', 'Label 3', 'Label 4', 'Label 5', 'Label 6', '']
fig, ax = plt.subplots(figsize=[15, 12])
for i, values in enumerate(data.values()):
ymin, ymax = values
ax.axvspan(xmin=i-width/2, xmax=i+width/2, ymin=ymin, ymax=ymax,
color=colors[i])
if ymax < 35/36:
label_y = 36 * ymax + 0.25
else:
label_y = 36 * ymin - 1
ax.text(i-width/2, label_y, labels[i], fontsize=16)
推荐阅读
- networking - 从辅助 PC (SQL Server) 发送查询
- javascript - 如何在 JavaScript 中将单个 HTML 输入字段作为数组使用?
- html - Bootstrap nav-brand 一旦导航到索引以外的页面就会消失
- javascript - 如何预取图像并将其保存在本地电子上
- conan - 为什么 Aws::String 不扩展 std::string
- java - 如何将 HttpsURLConnection GET 更改为 POST 请求?
- javascript - 如何根据 Tabulator-Dash 中的某些条件以编程方式选择行
- python - 从 nasdaq 下载所有带有 json 文件链接的列表
- python - VS Code 集成终端在运行 matplotlib 脚本时显示 Qt 不兼容
- coq - 结合隐式参数和部分应用