use*_*296 5 python matplotlib scatter-plot
我试图用散点图绘制一个大型数据集.我想用matplotlib用单像素标记来绘制它.它似乎已经解决了.
https://github.com/matplotlib/matplotlib/pull/695
但我找不到如何获得单个像素标记.
我的简化数据集(data.csv)
Length,Time
78154393,139.324091
84016477,229.159305
84626159,219.727537
102021548,225.222662
106399706,221.022827
107945741,206.760239
109741689,200.153263
126270147,220.102802
207813132,181.67058
610704756,50.59529
623110004,50.533158
653383018,52.993885
659376270,53.536834
680682368,55.97628
717978082,59.043843
Run Code Online (Sandbox Code Playgroud)
我的代码如下.
import pandas as pd
import os
import numpy
import matplotlib.pyplot as plt
inputfile='data.csv'
iplevel = pd.read_csv(inputfile)
base = os.path.splitext(inputfile)[0]
fig = plt.figure()
plt.yscale('log')
#plt.xscale('log')
plt.title(' My plot: '+base)
plt.xlabel('x')
plt.ylabel('y')
plt.scatter(iplevel['Time'], iplevel['Length'],color='black',marker=',',lw=0,s=1)
fig.tight_layout()
fig.savefig(base+'_plot.png', dpi=fig.dpi)
Run Code Online (Sandbox Code Playgroud)
您可以在下面看到这些点不是单个像素.
任何帮助表示赞赏
Imp*_*est 10
我担心你在引用的matplotlib git仓库中讨论的bugfix仅对有效plt.plot()而非有效plt.scatter()
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(4,2))
ax = fig.add_subplot(121)
ax2 = fig.add_subplot(122, sharex=ax, sharey=ax)
ax.plot([1, 2],[0.4,0.4],color='black',marker=',',lw=0, linestyle="")
ax.set_title("ax.plot")
ax2.scatter([1,2],[0.4,0.4],color='black',marker=',',lw=0, s=1)
ax2.set_title("ax.scatter")
ax.set_xlim(0,8)
ax.set_ylim(0,1)
fig.tight_layout()
print fig.dpi #prints 80 in my case
fig.savefig('plot.png', dpi=fig.dpi)
Run Code Online (Sandbox Code Playgroud)
解决方案是使用常用"o"或"s"标记,但将markersize设置为恰好一个像素.由于标记大小以点给出,因此需要使用图形dpi来计算点中一个像素的大小.这是72./fig.dpi.
For aplot`,markerize是直接的
ax.plot(..., marker="o", ms=72./fig.dpi)
Run Code Online (Sandbox Code Playgroud)对于scatter标记,通过s参数给出,该 参数是方形点,
ax.scatter(..., marker='o', s=(72./fig.dpi)**2)
Run Code Online (Sandbox Code Playgroud)完整的例子:
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(4,2))
ax = fig.add_subplot(121)
ax2 = fig.add_subplot(122, sharex=ax, sharey=ax)
ax.plot([1, 2],[0.4,0.4], marker='o',ms=72./fig.dpi, mew=0,
color='black', linestyle="", lw=0)
ax.set_title("ax.plot")
ax2.scatter([1,2],[0.4,0.4],color='black', marker='o', lw=0, s=(72./fig.dpi)**2)
ax2.set_title("ax.scatter")
ax.set_xlim(0,8)
ax.set_ylim(0,1)
fig.tight_layout()
fig.savefig('plot.png', dpi=fig.dpi)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6372 次 |
| 最近记录: |