Matplotlib - 根据它们在 x 轴上的位置设置不同的颜色
Matplotlib - set bars different color depending on where they are located on the x axis
我在 matplotlib 中制作了一个条形图,我想根据它们在 x 轴上的位置将条形的颜色更改为绿色或黄色。例如,表示 x 值在 [5, 6, 8, 9] 中的数据的条形图应为黄色,而所有其他条形图应为绿色。我怎么做?谢谢!
首先,如果您发布了一些 code.I 建议您阅读 matplotlib.org 上提供的信息以查看您正在使用的函数的可能选项是什么,那将是很好的。这是一个代码示例:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(10)
xx = x**2
cr = ['g','g','g','g','y','y','y','y','g','g']
fig,ax = plt.subplots()
ax.bar(x,xx,color=cr)
plt.show()
这会产生:
上述解决方案的唯一问题是我在 x 轴上的条形数量不一致,具体取决于绘图。我通过根据我的 x 值生成颜色数组来绕过它。如果该值落在我想涂成红色的范围内 - 我在列表中添加了一个 'r',否则我添加了 'g'。但总的来说,这正是 Sasha 的回答。
fig2, axs2 = plt.subplots(5, 2)
fig2.suptitle("Plot A")
plt.subplots_adjust(wspace = 0.5, hspace = 0.7)
for j in range (10):
row = j/2
col = j % 2
box_title = box_sorted[j]
box_x = box_top10[j].keys()
box_y = box_top10[j].values()
colors = []
for x in box_x:
if x in [5, 6, 8, 9]:
colors.append('r')
else:
colors.append('g')
axs2[row][col].bar([float(v) for v in box_x], [float(v) for v in box_y], align="center", color = colors)
axs2[row][col].set_title(box_title, fontsize = 12)
axs2[row][col].set_xlim ([0, 10.0])
axs2[row][col].set_ylim ([0, float(max(box_y) + 3)])
xticks = np.arange(0, 10, 1)
axs2[row][col].set_xticks(xticks)
yticks = np.arange(0, (max(box_y) + 5), int((max(box_y) + 6)/6))
axs2[row][col].set_yticks(yticks)
axs2[row][col].tick_params(axis='both', which='major', labelsize=8)
axs2[row][col].set_xlabel("rating", fontsize = 8)
axs2[row][col].set_ylabel("#p", fontsize = 8)
plt.show()
我在 matplotlib 中制作了一个条形图,我想根据它们在 x 轴上的位置将条形的颜色更改为绿色或黄色。例如,表示 x 值在 [5, 6, 8, 9] 中的数据的条形图应为黄色,而所有其他条形图应为绿色。我怎么做?谢谢!
首先,如果您发布了一些 code.I 建议您阅读 matplotlib.org 上提供的信息以查看您正在使用的函数的可能选项是什么,那将是很好的。这是一个代码示例:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(10)
xx = x**2
cr = ['g','g','g','g','y','y','y','y','g','g']
fig,ax = plt.subplots()
ax.bar(x,xx,color=cr)
plt.show()
这会产生:
上述解决方案的唯一问题是我在 x 轴上的条形数量不一致,具体取决于绘图。我通过根据我的 x 值生成颜色数组来绕过它。如果该值落在我想涂成红色的范围内 - 我在列表中添加了一个 'r',否则我添加了 'g'。但总的来说,这正是 Sasha 的回答。
fig2, axs2 = plt.subplots(5, 2)
fig2.suptitle("Plot A")
plt.subplots_adjust(wspace = 0.5, hspace = 0.7)
for j in range (10):
row = j/2
col = j % 2
box_title = box_sorted[j]
box_x = box_top10[j].keys()
box_y = box_top10[j].values()
colors = []
for x in box_x:
if x in [5, 6, 8, 9]:
colors.append('r')
else:
colors.append('g')
axs2[row][col].bar([float(v) for v in box_x], [float(v) for v in box_y], align="center", color = colors)
axs2[row][col].set_title(box_title, fontsize = 12)
axs2[row][col].set_xlim ([0, 10.0])
axs2[row][col].set_ylim ([0, float(max(box_y) + 3)])
xticks = np.arange(0, 10, 1)
axs2[row][col].set_xticks(xticks)
yticks = np.arange(0, (max(box_y) + 5), int((max(box_y) + 6)/6))
axs2[row][col].set_yticks(yticks)
axs2[row][col].tick_params(axis='both', which='major', labelsize=8)
axs2[row][col].set_xlabel("rating", fontsize = 8)
axs2[row][col].set_ylabel("#p", fontsize = 8)
plt.show()