Python-Matplotlib不同的颜色用于不同的y值

时间:2019-10-16 13:12:15

标签: python matplotlib colors

我一直在尝试使用matplotlib绘制一些数据。我正在使用:

int main()
{
    for (size_t i = 0; i < 3; i++)
    {
        printf("%zu", i);
    }
    return 0; // not needed for main - default is 0
}

此处x1Values是一个名称列表,例如:

printf

和y1Values是二进制元组的列表,例如:

plt.plot(x1Values, y1Values, color='green', linestyle='None', 
        marker='o', markerfacecolor='blue', markersize=4)

现在,上面提到的出图函数基本上按预期工作,相对于x轴上的每个值有两个点,但是由于我的实际列表大小约为100,所以出图有些混乱。这就是为什么我要避免使用plt.label()函数标记这些点的原因。标签开始重叠,使图形混乱并且有些无用。我想要做的就是给这些点赋予不同的颜色。例如,在图形上,我希望(alice,2)为绿色,而(alice,3)为红色。同样,(mike,4)为绿色,(mike,5)为红色,并且,如果可能的话,(我在这里没有很高的希望,但如果可能的话)我想要重叠点(jordan,1)和(约旦(1)为其他颜色,例如蓝色。但是,只要无法实现其余的目标,那就可以了。

2 个答案:

答案 0 :(得分:1)

我看到你的答案为时已晚,所以这也是我的方法:

我认为,通常散点图更适合您的情况。 因为它允许您为每个点分别设置颜色。 下面的实现还将重叠的结果绘制为蓝色。

from matplotlib import pyplot as plt

x1Values = ['alice', 'jordan', 'mike']
y1Values = [(2,3),(1,1),(4,5)]

xData = []
yData = []
cols = []
for counter, name in enumerate(x1Values):
    #Decide which point gets which color
    if (y1Values[counter][0] > y1Values[counter][1]):
        cols += ['r', 'g']
    elif (y1Values[counter][0] < y1Values[counter][1]):
        cols += ['g', 'r']
    else:
        cols += ['b', 'b']

    #adding names and values to the data for x and y Axes    
    xData += [name, name]
    yData += y1Values[counter]


myplot = plt.scatter(xData, yData, color=cols)

plt.show()

答案 1 :(得分:0)

在发布问题后数分钟就找到了解决方案。将y值分成两个列表,并分别绘制它们,这是代码:

y1Values = [i[0] for i in yValues]
y2Values = [i[1] for i in yValues]
plt.plot(x1Values, y1Values, color='black', linestyle='None', linewidth = 3, 
        marker='o', markerfacecolor='green', markersize=4)
plt.plot(x1Values, y2Values, color='black', linestyle='None', linewidth = 3, 
        marker='o', markerfacecolor='red', markersize=4)