【问题标题】:rescaling axes on pcolor plot from pandas data frame来自熊猫数据框的 pcolor 图上的缩放轴
【发布时间】:2017-06-29 18:35:54
【问题描述】:

我正在从一个列结构或多或少像这样的文本文件中输入数据:

x   y   density

我需要绘制密度(x,y)的热图。

我刚刚开始使用 pyplot 和 pandas,我不确定如何有效地实现此功能。

我首先尝试只加载列并使用

进行绘图
plt.pcolor( OrbData[['x']], OrbData[['y']], OrbData[['density']]  )

但这失败了,因为颜色值必须在一个数组中。所以现在我将 x,y 值用作多索引并解压缩数据框。

这是我的脚本

import matplotlib.pyplot as plt 
import numpy as np
import pandas as pd

Morbs = 2 
OrbFile = "69.0000000orbs.dat"

### Load in the data using pandas
OrbData = pd.read_csv(OrbFile, sep='\s+', usecols = [ 0, 1, 7 ], header= None, names=['x','y','density'], skiprows=2)
OrbData = OrbData.set_index(['x','y'])
OrbData=OrbData.unstack()

plt.figure(1)
plt.pcolor(OrbData[['density']], cmap='hot')
plt.gca().set_aspect('equal')
plt.show()

这几乎可以完美运行,但图中的轴显示记录号 (0,50) 而不是索引值 (-2,2)。

如果我尝试 plt.pcolor(OrbData[['x']], OrbData[['y']], OrbData[['Mag1']], cmap='hot') 处理解压后的数据,我会收到错误消息 KeyError: "['x'] not in index".

如果我尝试使用 OrbData.index 访问索引值,我只能恢复 x 值(行),我不知道如何访问 y 值(列)。

我可以想出几种方法来做到这一点,但它们都觉得老套和低效。

1) 在解包之前分别保存 x,y 列

2) 转置数据帧并使用 OrbData.index 获取 y 值

3) 以某种方式手动重新缩放 pyplot 中的轴

我正在尝试为动画制作大约 10^5 个图,每个图至少有 10^4 条记录,所以我需要一些不太浪费的东西。
必须有一些简单的方法以 pcolor 可以读取的格式从列数据中提取值。

有什么想法吗?

【问题讨论】:

  • 使用 matplotlib.axes.Axes.contourf 方法:matplotlib.org/api/_as_gen/matplotlib.axes.Axes.contourf.html 这将为您提供以 x 和 y 为轴(1. 和 2. 维)和密度为第三维的 3D 图像。如果您调整 cmap 参数,您可以为密度绘制不同的颜色
  • 您在这里没有得到满意答案的原因是人们不知道您的数据是如何组织的以及它的外观。请提供minimal reproducible example 和清晰的问题描述。

标签: python pandas matplotlib plot


【解决方案1】:

这段代码摘自 Jake VanderPlas 的 Python 数据科学手册:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt


x=np.linspace(0,10,100)
y=np.linspace(0,10,100)

def density(x,y):
    return np.sin(x) ** 10 + np.cos(10 + y * x)*np.cos(x)

X,Y=np.meshgrid(x,y)
Z=density(X,Y)


plt.contourf(X,Y,Z,cmap="magma")


plt.show()

这种方法产生如下结果:

【讨论】:

  • 感谢您抽出宝贵时间提供答案,但我认为这不能解决问题。我需要找到一种方法将 X、Y 数据从 pandas 数据框中提取出来。
猜你喜欢
  • 2016-05-07
  • 2021-02-15
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 2017-11-08
  • 2020-03-09
相关资源
最近更新 更多