首页 > 解决方案 > 使用数据框列作为带有 matplotlib 的图形线的颜色

问题描述

我画了一个这样的图表:

p1=ax1.plot(df['timestamp'], df['break_even'], color='blue', zorder = 0)

但我希望该行根据另一列更改颜色:

p1=ax1.plot(df['timestamp'], df['break_even'], color=df['trade_color'], zorder = 0)

这行不通,我得到:

ValueError: Invalid RGBA argument: 0           red
1         green
2           red
3           red
4         green
          ...  

如何做到这一点?

这是一个测试示例:

data = [[1, 10, 'red'], [2, 15, 'green'], [3, 14, 'blue']] 
df = pd.DataFrame(data, columns = ['x', 'y', 'color'])
fig, ax = plt.subplots()
ax.plot(df['x'], df['y'], color='darkorange', zorder = 0)

这会起作用,但是:

ax.plot(df['x'], df['y'], color=df['color'], zorder = 0)

将不会。如何让每个线段使用我需要的颜色?(如果有区别,我只有两种颜色)

标签: pythonpandasmatplotlib

解决方案


每次只需使用您想要的颜色绘制数据框的一部分:

import pandas as pd
import matplotlib.pyplot as plt

data = [[1, 10, 'red'], [2, 15, 'green'], [3, 14, 'blue']]

df = pd.DataFrame(data, columns = ['x', 'y', 'color'])

fig, ax = plt.subplots()

for i in df.index:
    '''
    Get two rows each time, every row has a point (x, y)
    Two points can draw a line, use the color defined by first row
    '''
    partial = df.iloc[i:i+2, :]
    ax.plot(partial['x'], partial['y'], color=partial['color'].iloc[0], zorder = 0)

plt.show()

在此处输入图像描述


推荐阅读