我正努力用Python/Matplotlib创建一个条形图。这个想法是导入一个csv,绘制一个条形图,但是根据列表中的条目选择条形图的颜色--x轴基本上包含一个年份列,列表中包含一个较短的年份列表,我想要更改颜色。当我手动输入一个值而不是一个列表(请参见"color1")时,它是有效的,但对于一个列表则不起作用。我所能做的最好是添加在另一个np.array中查找的年份,并比较这些年,但是我从那个python中得到的所有警告都是不明确的结果,并且需要使用a.any() --实际上我是个新手。如果有人知道我在这里做错了什么,请提供任何帮助,特别是因为这是我python/matplotlib体验的第二天。因此,我真的不想开始探索熊猫作为一种选择,这是一些解决方案在这里使用。其他人则使用简单的python列表。在这里,我需要使用np.array的一个列和一个python列表。
import matplotlib.pyplot as plt
import numpy as np
#import csv, first column is a list of years
with open("./data.csv") as data:
x,y,z = np.genfromtxt((line.replace(',', '.') for line in data), delimiter=";", usecols=(0,1,2), unpack=True)
width = 0.35 # width of bars
yearticks = [1990, 1998, 2008, 2021]
color1 = ["red" if i != 1991 else "blue" for i in x]
fig, ax = plt.subplots()
rects1 = ax.bar(x - width/2, y, width, label='y-axis', color=color1)
rects2 = ax.bar(x + width/2, z, width, label='z-axis')
ax.set_ylabel('ylabel')
ax.set_title('xlabel')
ax.set_xticks(yearticks)
发布于 2022-09-12 13:42:59
这就是你要找的吗?我更新了代码,以便它检查x(年份)是否在列表中,并将x条画成蓝色/红色。由于x,y,z数据不可用,使用了随机数据(前3行)。
x=np.random.randint(1990, 2020, size=(20))
y=np.random.randint(30, size=(20))
z=np.random.randint(30, 60, size=(20))
width = 0.35 # width of bars
yearticks = [1990, 1998, 2008, 2021]
color1 = ["red" if i in yearticks else "blue" for i in x]
fig, ax = plt.subplots(figsize=(20,5))
rects1 = ax.bar(x - width/2, y, width, label='y-axis', color=color1)
rects2 = ax.bar(x + width/2, z, width, label='z-axis')
ax.set_ylabel('ylabel')
ax.set_title('xlabel')
ax.set_xticks(yearticks)
https://stackoverflow.com/questions/73688748
复制相似问题