如何使用 pandas 和 matplotlib.pyplot 绘制半大型数据集(~20k 点)?有更好的绘图工具吗?
How to graph semi-large datasets (~20k points) using pandas and matplotlib.pyplot? Are there better tools for graphing?
我正在尝试使用 pandas 和 matplotlib.pyplot 绘制导入的 csv 文件。 csv 文件有 20k 个数据点,为简单起见是线性的。我有以下代码:
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv(r'/Users/ephemeralhappiness/Desktop/Packet/20kData.csv')
df = pd.DataFrame(data, columns=['Displacement Into Surface', 'Load On Sample'])
x = df['Load On Sample']
y = df['Displacement Into Surface']
plt.scatter(x, y)
plt.xlabel('Load On Sample')
plt.ylabel('Displacement Into Surface')
plt.show()
当我 运行 程序时,我得到以下图形输出:
该图的轴上有黑色标记,20k 点根本没有间隔开。如何解决这个问题?
我认为工具不是这里的问题:
点间距:如果您的屏幕分辨率为 1920x1080,则对角线应为 sqrt(1920^2 + 1080^2) ~= 2200 像素。
所以没有办法在对角线上显示十倍的数据点并且它们被清楚地识别出来。
你可以做的是初始化非常大的图形,然后绘制小数据点符号。然后您可以放大图中的某些部分并查看各个数据点。
至于你的代码,当我 运行 它与合成数据(x 和 y 之间的线性关系,有 20000 个数据点)时,轴标签很好地工作:
df = pd.DataFrame({'Load On Sample':np.arange(20000),
'Displacement Into Surface': 2*np.arange(20000)})
x = df['Load On Sample']
y = df['Displacement Into Surface']
plt.scatter(x, y, s=1)
plt.xlabel('Load On Sample')
plt.ylabel('Displacement Into Surface')
plt.show()
即使您的代码没有为您的数据集生成合适的刻度间距,您也可以调整 xticks、yticks 和相应的标签:
合成数据示例:
plt.scatter(x, y, s=1)
plt.xlabel('Load On Sample')
plt.ylabel('Displacement Into Surface')
plt.gca().set_xticks([0,10000,20000])
plt.gca().set_yticks([10000,20000,30000,40000])
plt.show()
您可以使用 xticks 和 yticks 以及 numpy 来个性化您的图形(您只需要调整 np.arange 中的 STEP 值):
import numpy as np
fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8]) # main axes
ax.scatter(x, y)
ax.set_xticks(np.arange(min(x), max(x)+1, 1.0))
ax.set_yticks(np.arange(min(y), max(y)+1, 1.0))
我正在尝试使用 pandas 和 matplotlib.pyplot 绘制导入的 csv 文件。 csv 文件有 20k 个数据点,为简单起见是线性的。我有以下代码:
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv(r'/Users/ephemeralhappiness/Desktop/Packet/20kData.csv')
df = pd.DataFrame(data, columns=['Displacement Into Surface', 'Load On Sample'])
x = df['Load On Sample']
y = df['Displacement Into Surface']
plt.scatter(x, y)
plt.xlabel('Load On Sample')
plt.ylabel('Displacement Into Surface')
plt.show()
当我 运行 程序时,我得到以下图形输出:
该图的轴上有黑色标记,20k 点根本没有间隔开。如何解决这个问题?
我认为工具不是这里的问题:
点间距:如果您的屏幕分辨率为 1920x1080,则对角线应为 sqrt(1920^2 + 1080^2) ~= 2200 像素。 所以没有办法在对角线上显示十倍的数据点并且它们被清楚地识别出来。
你可以做的是初始化非常大的图形,然后绘制小数据点符号。然后您可以放大图中的某些部分并查看各个数据点。
至于你的代码,当我 运行 它与合成数据(x 和 y 之间的线性关系,有 20000 个数据点)时,轴标签很好地工作:
df = pd.DataFrame({'Load On Sample':np.arange(20000),
'Displacement Into Surface': 2*np.arange(20000)})
x = df['Load On Sample']
y = df['Displacement Into Surface']
plt.scatter(x, y, s=1)
plt.xlabel('Load On Sample')
plt.ylabel('Displacement Into Surface')
plt.show()
即使您的代码没有为您的数据集生成合适的刻度间距,您也可以调整 xticks、yticks 和相应的标签:
合成数据示例:
plt.scatter(x, y, s=1)
plt.xlabel('Load On Sample')
plt.ylabel('Displacement Into Surface')
plt.gca().set_xticks([0,10000,20000])
plt.gca().set_yticks([10000,20000,30000,40000])
plt.show()
您可以使用 xticks 和 yticks 以及 numpy 来个性化您的图形(您只需要调整 np.arange 中的 STEP 值):
import numpy as np
fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8]) # main axes
ax.scatter(x, y)
ax.set_xticks(np.arange(min(x), max(x)+1, 1.0))
ax.set_yticks(np.arange(min(y), max(y)+1, 1.0))