通过第三个变量对线条进行颜色 - Python

问题描述 投票:0回答:3

我有以下数据集:


In[55]: usdbrl
Out[56]: 
        Date   Price    Open    High     Low  Change       STD
0 2016-03-18  3.6128  3.6241  3.6731  3.6051   -0.31  0.069592
1 2016-03-17  3.6241  3.7410  3.7449  3.6020   -3.16  0.069041
2 2016-03-16  3.7422  3.7643  3.8533  3.7302   -0.62  0.068772
3 2016-03-15  3.7656  3.6610  3.7814  3.6528    2.83  0.071474
4 2016-03-14  3.6618  3.5813  3.6631  3.5755    2.23  0.070348
5 2016-03-11  3.5820  3.6204  3.6692  3.5716   -1.09  0.076458
6 2016-03-10  3.6215  3.6835  3.7102  3.6071   -1.72  0.062977
7 2016-03-09  3.6849  3.7543  3.7572  3.6790   -1.88  0.041329
8 2016-03-08  3.7556  3.7826  3.8037  3.7315   -0.72  0.013700
9 2016-03-07  3.7830  3.7573  3.7981  3.7338    0.63  0.000000

我想绘制价格与日期的关系图: enter image description here

但我想用第三个变量(在我的例子中为日期或更改)为该线着色。

有人可以帮忙吗?

谢谢。

python matplotlib plot
3个回答
13
投票

我编写了一个简单的函数来将给定属性映射到颜色:

import matplotlib.cm as cm
import matplotlib.pyplot as plt

def plot_colourline(x,y,c):
    col = cm.jet((c-np.min(c))/(np.max(c)-np.min(c)))
    ax = plt.gca()
    for i in np.arange(len(x)-1):
        ax.plot([x[i],x[i+1]], [y[i],y[i+1]], c=col[i])
    im = ax.scatter(x, y, c=c, s=0, cmap=cm.jet)
    return im

此函数标准化所需的属性并从喷射颜色图中获取颜色。该函数返回的 PathCollection 也将允许绘制颜色条。您可能想使用不同的。然后,获取当前轴并用不同的颜色绘制数据的不同部分。因为我正在做一个 for 循环,所以您应该避免将它用于非常大的数据集,但是,对于正常目的它是有用的。

将以下示例视为测试:

import numpy as np
import matplotlib.pyplot as plt

n = 100
x = 1.*np.arange(n)
y = np.random.rand(n)
prop = x**2

fig = plt.figure(1, figsize=(5,5))
ax  = fig.add_subplot(111)
im = plot_colourline(x,y,prop)
fig.colorbar(im)

enter image description here


6
投票

您可以通过第三个变量为数据点着色,如果这有帮助的话:

dates = [dt.date() for dt in pd.to_datetime(df.Date)]
plt.scatter(dates, df.Price, c=df.Change, s=100, lw=0)
plt.plot(dates, df.Price)
plt.colorbar()
plt.show()

enter image description here


0
投票

matplotlib 文档提供了两种基于第三个值对线条进行着色的方法。请参阅多彩线条。例如,它提供了函数

colored_line
,您可以使用它,如下所示。

# -------------- Create and show plot --------------
# Some arbitrary function that gives x, y, and color values
t = np.linspace(-7.4, -0.5, 200)
x = 0.9 * np.sin(t)
y = 0.9 * np.cos(1.6 * t)
color = np.linspace(0, 2, t.size)

# Create a figure and plot the line on it
fig1, ax1 = plt.subplots()
lines = colored_line(x, y, color, ax1, linewidth=10, cmap="plasma")
fig1.colorbar(lines)  # add a color legend

# Set the axis limits and tick positions
ax1.set_xlim(-1, 1)
ax1.set_ylim(-1, 1)
ax1.set_xticks((-1, 0, 1))
ax1.set_yticks((-1, 0, 1))
ax1.set_title("Color at each point")

plt.show()
© www.soinside.com 2019 - 2024. All rights reserved.