2016-09-28 2 views
2

Ich versuche, einen großen Datensatz mit einem Streudiagramm zu plotten. Ich möchte Matplotlib verwenden, um es mit einzelnen Pixelmarker zu plotten. Es scheint, dass es gelöst worden ist.Streudiagramm mit Einzelpixelmarkierung in Matplotlib

https://github.com/matplotlib/matplotlib/pull/695

Aber ich kann keine Erwähnung finden, wie ein einzelnes Pixel Marker zu erhalten.

Mein vereinfachte Datensatz (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 

Mein Code ist unten.

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) 

Sie können unten sehen, dass die Punkte nicht einzelne Pixel sind.

data_plot.png

Jede Hilfe

Antwort

2

Ich fürchte, versteht sich, dass die Bugfix bei matplotlib Git Repository diskutiert, die Sie unter Berufung auf für plt.plot() nur gültig ist und nicht für 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) 

enter image description here

2

Für jeden, der immer noch versucht, dies herauszufinden, die Lösung Ich fand, dass ich das Argument s in plt.scatter angeben sollte.

Das Argument s bezieht sich auf den Bereich des zu plottenden Punktes.

Es scheint nicht ganz perfekt zu sein, da s = 1 ungefähr 4 Pixel meines Bildschirms zu decken scheint, aber das macht sie definitiv kleiner als alles, was ich bisher gefunden habe.

https://matplotlib.org/devdocs/api/_as_gen/matplotlib.pyplot.scatter.html

s: Skalar oder array_like, die Form (n,), optional
Größe in Punkten^2. Der Standardwert ist rcParams ['lines.markersize'] ** 2.

Verwandte Themen