2016-06-21 11 views
1

Ich versuche, bunte Streudiagramm mit dritten Variable, um Farbe zu definieren. Es ist einfach den folgenden Code zu verwenden:Keine Farbe, wenn ich Python streuen Farbplot unter Verwendung der dritten Variable, um Farbe zu definieren

plt.scatter(mH, mA, s=1, c=mHc) 
plt.colorbar() 
plt.show() 

Aber ich habe nicht viele Möglichkeiten den Rahmen der Handlung zu ändern. Ich versuche, den folgenden Code bunten Streudiagramm zu machen, zur gleichen Zeit, die ich versuche, den Rahmen der Handlung zu optimieren:

import numpy as np 
import math 
from matplotlib import rcParams 
import matplotlib.pyplot as plt 
from matplotlib.ticker import AutoMinorLocator 

fig, ax = plt.subplots() 

cax = ax.scatter(mH,mA,s=0.5,c=mHc) ### mH, mA, mHC are the dataset 
fig.colorbar(cax) 
minor_locator1 = AutoMinorLocator(6) 
minor_locator2 = AutoMinorLocator(6) 
ax.xaxis.set_minor_locator(minor_locator1) 
ax.yaxis.set_minor_locator(minor_locator2) 
ax.tick_params('both', length=10, width=2, which='major') 
ax.tick_params('both', length=5, width=2, which='minor') 
ax.set_xlabel(r'$m_H$') 
ax.set_ylabel(r'$m_A$') 
ax.set_xticks([300,600,900,1200,1500]) 
ax.set_yticks([300,600,900,1200,1500]) 

plt.savefig('mH_mA.png',bbox_inches='tight') 
plt.show() 

Aber die Handlung I ist schwarz-weiß bekam. Es sieht so aus, als ob das Problem im Argument der Markergröße liegt, aber ich habe keine Ahnung, wie ich es korrigieren soll. Ich möchte eine kleinere Markergröße haben. Jeder kann mir eine Idee anbieten, um dieses Problem anzugehen. Vielen Dank. enter image description here

Antwort

3

size=0.5 ist extrem klein - wahrscheinlich ist alles, was Sie sehen, die Marker-Umrisse. Ich würde vorschlagen, dass Sie die Größe ein wenig erhöhen, und vielleicht edgecolors="none" passieren, um den Peilkante Hub zu deaktivieren:

import numpy as np 
from matplotlib import pyplot as plt 

n = 10000 
x, y = np.random.randn(2, n) 
z = -(x**2 + y**2)**0.5 

fig, ax = plt.subplots(1, 1) 
ax.scatter(x, y, s=5, c=z, cmap="jet", edgecolors="none") 

enter image description here

Vielleicht wollen Sie auch mit machen die Punkte halbtransparent die alpha= mit experimentieren Parameter:

ax.scatter(x, y, s=20, c=z, alpha=0.1, cmap="jet", edgecolors="none") 

enter image description here

Es kann schwierig sein zu bekommen Streudiagramme, um gut auszusehen, wenn Sie so viele überlappende Punkte haben. Ich würde versucht sein, Ihre Daten als 2D-Histogramm oder Konturdiagramm plotten statt, oder vielleicht sogar eine Kombination aus einem Streudiagramm und eine Konturdiagramm:

density, xe, ye = np.histogram2d(x, y, bins=20, normed=True) 
ax.hold(True) 
ax.scatter(x, y, s=5, c=z, cmap="jet", edgecolors="none") 
ax.contour(0.5*(xe[:-1] + xe[1:]), 0.5*(ye[:-1] + ye[1:]), density, 
      colors='k') 

enter image description here

+0

Vielen Dank. Es ist so hilfreich. –

Verwandte Themen