2017-07-18 87 views
1

我有一个表中有月份数字作为列(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() 

生成的情节见图像:应该有在x轴12“仓” ..对于x = 12的值不被绘出。 http://imgur.com/a/0pK8R

回答

1

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

您有2个选项来解决这个问题:

  1. heights还有一列添加一个多列索引你的times2。那么你不会错过任何来自densities的数据。之后你可能会也可能不想调整你的xticklabelsyticklabels
  2. 只是绘制densities或您的dfplt.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() 
    

enter image description here