【问题标题】:colormap plot doesn't show all values [duplicate]颜色图不显示所有值[重复]
【发布时间】:2017-12-22 18:41:16
【问题描述】:

我有一个表格,其中包含月份数作为列(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

【问题讨论】:

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


    【解决方案1】:

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

    你有两个选择来解决这个问题:

    1. heights 中再添加一个行索引,在times2 中再添加一个列。这样您就不会错过来自densities 的任何数据。在您可能想要也可能不想调整 xticklabelsyticklabels 之后。
    2. 首先通过plt.pcolor(densities, cmap='Spectral', vmin = 0)plt.pcolor(df, cmap='Spectral', vmin = 0) 绘制densitiesdf。然后根据需要调整您的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()
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-09
      • 2014-03-13
      • 1970-01-01
      • 2016-05-04
      • 2021-03-12
      • 2020-12-06
      • 1970-01-01
      • 2017-04-14
      相关资源
      最近更新 更多