colormap plot不显示所有值

时间:2017-07-18 04:35:50

标签: python-2.7 python-3.x matplotlib matplotlib-basemap

我有一个表,其中月份数字为列(jan = 1,feb = 2 ... dec = 12),一组高度作为索引,数据填充每个高度的每个月的列。

我试图用这个绘制彩色地图,x轴上的月份和y轴上的高度,颜色表示密度。但是,这样做会从我的数据中删除一些值,具体而言,它不会显示第12个月的数据。

这是我的代码:

times2 = df.columns;
heights = df.index
heights = heights.values.astype(np.float64)
densities = df.values

plt.pcolor(times2, heights, densities, cmap='Spectral', vmin = 0)
cb = plt.colorbar()
cb.set_label('Density of Na[atoms/cc]')

plt.ylabel('Heights[km]')
plt.xlabel('month')
plt.xticks(times2)
plt.show()

见生成的图的图像:应该有12" bins"在x轴上..未绘制x = 12的值。 http://imgur.com/a/0pK8R

1 个答案:

答案 0 :(得分:1)

这是pcolor()的预期行为。我的猜测除了失去第12个月外,你还错过了最大高度的数据。正如您在the documentation中看到的那样,实际的颜色块数量为"彩色四边形"您最终通过len(x) - 1进行投标len(y) - 1。你也可以从你的情节中说出来。如果您查看x轴,则会在2个月之间(例如12之间)绘制与密度值对应的颜色,而不是每个月。

您有2个选项可以解决此问题:

  1. heights中添加一个行索引,在times2中再添加一列。然后你不会错过densities的任何数据。在您可能或不想调整xticklabelsyticklabels
  2. 之后
  3. 首先按densitiesdf制作plt.pcolor(densities, cmap='Spectral', vmin = 0)plt.pcolor(df, cmap='Spectral', vmin = 0)。然后根据需要调整xticklabelsyticklabels。这样pcolor()实际上会在densities中绘制所有值:

    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    
    xticklabels = list('ABCDE')
    yticklabels = list('abc')
    df = pd.DataFrame(np.random.randn(3, 5), index=yticklabels, columns=xticklabels)
    plt.pcolor(df, cmap='Spectral', vmin = 0)
    plt.xticks(np.arange(len(xticklabels)) + 0.5, xticklabels)
    plt.yticks(np.arange(len(yticklabels)) + 0.5, yticklabels)
    plt.colorbar()
    plt.show()
    
  4. enter image description here