Poiché altre risposte qui affermano che s
indica l'area del marcatore, sto aggiungendo questa risposta per chiarire che non è necessariamente così.
Dimensione in punti ^ 2
L'argomento s
in plt.scatter
indica il markersize**2
. Come dice la documentazione
s
: scalare o array_like, forma (n,),
dimensione opzionale in punti ^ 2. L'impostazione predefinita è rcParams ['lines.markersize'] ** 2.
Questo può essere preso alla lettera. Per ottenere un marcatore che è x punti grandi, è necessario quadrare quel numero e assegnarlo s
all'argomento.
Quindi la relazione tra la dimensione marcata di un grafico a linee e l'argomento della dimensione della dispersione è il quadrato. Al fine di produrre un marcatore a dispersione della stessa dimensione di un marcatore a trama di dimensione 10 punti che chiamereste scatter( .., s=100)
.
import matplotlib.pyplot as plt
fig,ax = plt.subplots()
ax.plot([0],[0], marker="o", markersize=10)
ax.plot([0.07,0.93],[0,0], linewidth=10)
ax.scatter([1],[0], s=100)
ax.plot([0],[1], marker="o", markersize=22)
ax.plot([0.14,0.86],[1,1], linewidth=22)
ax.scatter([1],[1], s=22**2)
plt.show()
Collegamento a "area"
Quindi perché altre risposte e persino la documentazione parlano di "area" quando si tratta del s
parametro?
Naturalmente le unità di punti ** 2 sono unità di area.
- Per il caso speciale di un marcatore quadrato
marker="s"
, l'area del marcatore è effettivamente direttamente il valore del s
parametro.
- Per un cerchio, l'area del cerchio è
area = pi/4*s
.
- Per altri marcatori potrebbe non esserci nemmeno una relazione evidente con l'area del marcatore.
In tutti i casi, tuttavia, l'area del marker è proporzionale al s
parametro . Questa è la motivazione per chiamarla "area" anche se nella maggior parte dei casi non lo è.
Specificare la dimensione dei marker di dispersione in termini di una certa quantità che è proporzionale all'area del marker ha senso finora in quanto è l'area del marker che viene percepita quando si confrontano patch diverse anziché la sua lunghezza o diametro laterale. Vale a dire il raddoppio della quantità sottostante dovrebbe raddoppiare l'area del marcatore.
Quali sono i punti?
Finora la risposta a ciò che significa la dimensione di un marker scatter è data in unità di punti. I punti sono spesso usati in tipografia, dove i caratteri sono specificati in punti. Anche le larghezze di linea sono spesso specificate in punti. La dimensione standard dei punti in matplotlib è 72 punti per pollice (ppi) - 1 punto è quindi 1/72 pollici.
Potrebbe essere utile poter specificare le dimensioni in pixel anziché in punti. Se anche la cifra in dpi è 72, un punto è un pixel. Se il valore dpi è diverso (impostazione predefinita matplotlib fig.dpi=100
),
1 point == fig.dpi/72. pixels
Mentre le dimensioni del marcatore a dispersione in punti apparirebbero quindi diverse per i diversi valori dpi, si potrebbe produrre un marcatore 10 per 10 pixel ^ 2, che avrebbe sempre lo stesso numero di pixel coperti:
import matplotlib.pyplot as plt
for dpi in [72,100,144]:
fig,ax = plt.subplots(figsize=(1.5,2), dpi=dpi)
ax.set_title("fig.dpi={}".format(dpi))
ax.set_ylim(-3,3)
ax.set_xlim(-2,2)
ax.scatter([0],[1], s=10**2,
marker="s", linewidth=0, label="100 points^2")
ax.scatter([1],[1], s=(10*72./fig.dpi)**2,
marker="s", linewidth=0, label="100 pixels^2")
ax.legend(loc=8,framealpha=1, fontsize=8)
fig.savefig("fig{}.png".format(dpi), bbox_inches="tight")
plt.show()
Se sei interessato a una dispersione in unità di dati, controlla questa risposta .