我有一个表,其中月份数字为列(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
答案 0 :(得分:1)
这是pcolor()
的预期行为。我的猜测除了失去第12个月外,你还错过了最大高度的数据。正如您在the documentation中看到的那样,实际的颜色块数量为"彩色四边形"您最终通过len(x) - 1
进行投标len(y) - 1
。你也可以从你的情节中说出来。如果您查看x轴,则会在2个月之间(例如1
和2
之间)绘制与密度值对应的颜色,而不是每个月。
您有2个选项可以解决此问题:
heights
中添加一个行索引,在times2
中再添加一列。然后你不会错过densities
的任何数据。在您可能或不想调整xticklabels
和yticklabels
。首先按densities
或df
制作plt.pcolor(densities, cmap='Spectral', vmin = 0)
或plt.pcolor(df, cmap='Spectral', vmin = 0)
。然后根据需要调整xticklabels
和yticklabels
。这样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()