【问题标题】:Consistent color argument between matplotlib scatter to matplotlib plot?matplotlib scatter 到 matplotlib plot 之间的颜色参数一致?
【发布时间】:2021-07-15 20:55:31
【问题描述】:

我希望使用 matplotlib 来绘制每月数据的年际变化(如下)。通过在plt.scatter() 中传递c=ds['time.year'],我达到了预期的结果。但是,我希望能够通过类似的plt.plot() 调用来连接这些点。这可能吗?

import pandas as pd
import matplotlib.pyplot as plt
import xarray as xr

# create y data 
y = []
for yr in range(10):
    for mo in range(12):
        y.append(yr+mo+(yr*mo)**2)

# create datetime vector
t = pd.date_range(start='1/1/2010', periods=120, freq='M')

# combine in DataArray
ds = xr.DataArray(y, coords={'time':t}, dims=['time'])

# scatter plot with color 
im = plt.scatter(ds['time.month'], ds.values, c=ds['time.year'])
plt.colorbar(im)

输出:

我尝试了以下方法,但它不起作用:

plt.plot(ds['time.month'], ds.values, c=ds['time.year'])

【问题讨论】:

    标签: python pandas matplotlib python-xarray


    【解决方案1】:

    您可以创建一个规范,将年份范围映射到颜色范围。标准与使用的颜色图一起,可以作为ScalarMapple 的输入来创建伴随的颜色条。使用默认的“viridis”颜色图,代码可能如下所示:

    import matplotlib.pyplot as plt
    from matplotlib.cm import ScalarMappable
    import pandas as pd
    import xarray as xr
    
    y = []
    for yr in range(10):
        for mo in range(12):
            y.append(yr + mo + (yr * mo) ** 2)
    t = pd.date_range(start='1/1/2010', periods=120, freq='M')
    ds = xr.DataArray(y, coords={'time': t}, dims=['time'])
    
    norm = plt.Normalize(ds['time.year'].min(), ds['time.year'].max())
    cmap = plt.cm.get_cmap('viridis')
    for year in range(int(ds['time.year'].min()), int(ds['time.year'].max()) + 1):
        plt.plot(ds['time.month'][ds['time.year'] == year],
                 ds.values[ds['time.year'] == year],
                 ls='-', marker='o', color=cmap(norm(year)))
    plt.colorbar(ScalarMappable(cmap=cmap, norm=norm))
    plt.xticks(range(1, 13))
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 2017-07-16
      • 2015-04-10
      • 2021-05-06
      • 2019-12-07
      • 1970-01-01
      • 2017-09-27
      • 1970-01-01
      • 1970-01-01
      • 2019-09-21
      相关资源
      最近更新 更多