Belirli bir alandaki farklı sıcaklıkları temsil etmek için bir 4D dağılım grafiği oluşturdum. Göstergeyi oluşturduğumda, gösterge doğru sembolü ve rengi gösteriyor ancak içinden bir çizgi ekliyor. Kullandığım kod şu şekilde:
colors=['b', 'c', 'y', 'm', 'r']
lo = plt.Line2D(range(10), range(10), marker='x', color=colors[0])
ll = plt.Line2D(range(10), range(10), marker='o', color=colors[0])
l = plt.Line2D(range(10), range(10), marker='o',color=colors[1])
a = plt.Line2D(range(10), range(10), marker='o',color=colors[2])
h = plt.Line2D(range(10), range(10), marker='o',color=colors[3])
hh = plt.Line2D(range(10), range(10), marker='o',color=colors[4])
ho = plt.Line2D(range(10), range(10), marker='x', color=colors[4])
plt.legend((lo,ll,l,a, h, hh, ho),('Low Outlier', 'LoLo','Lo', 'Average', 'Hi', 'HiHi', 'High Outlier'),numpoints=1, loc='lower left', ncol=3, fontsize=8)
Line2Dyi
Scatterve
scatterolarak değiştirmeyi denedim. Scatter
bir hata döndürdü ve scatter
grafiği değiştirdi ve bir hata döndürdü.
Scatterile,
range(10)`'u veri noktalarını içeren listelere değiştirdim. Her liste x, y veya z değişkenini içerir.
lo = plt.scatter(xLOutlier, yLOutlier, zLOutlier, marker='x', color=colors[0])
ll = plt.scatter(xLoLo, yLoLo, zLoLo, marker='o', color=colors[0])
l = plt.scatter(xLo, yLo, zLo, marker='o',color=colors[1])
a = plt.scatter(xAverage, yAverage, zAverage, marker='o',color=colors[2])
h = plt.scatter(xHi, yHi, zHi, marker='o',color=colors[3])
hh = plt.scatter(xHiHi, yHiHi, zHiHi, marker='o',color=colors[4])
ho = plt.scatter(xHOutlier, yHOutlier, zHOutlier, marker='x', color=colors[4])
plt.legend((lo,ll,l,a, h, hh, ho),('Low Outlier', 'LoLo','Lo', 'Average', 'Hi', 'HiHi', 'High Outlier'),scatterpoints=1, loc='lower left', ncol=3, fontsize=8)
Bunu çalıştırdığımda, gösterge artık mevcut değil, köşede içinde hiçbir şey olmayan küçük beyaz bir kutu.
Tavsiyen var mı?
Aşağıdaki örnek kodda olduğu gibi, matplotlib.pyplot
modülünün scatter
yöntemini kullanmak işe yarayacaktır (en azından Python 2.7.5 ile matplotlib 1.2.1 ile). Ayrıca, dağılım grafikleri kullanıyorsanız, her bir grafik girişi için yalnızca bir noktaya sahip olmak için açıklama çağrısında numpoints=1
yerine scatterpoints=1
kullanın.
Aşağıdaki kodda, aynı aralığı tekrar tekrar çizmek yerine rastgele değerler kullandım ve tüm grafikleri görünür hale getirdim (yani birbiriyle örtüşmüyor).
import matplotlib.pyplot as plt
from numpy.random import random
colors = ['b', 'c', 'y', 'm', 'r']
lo = plt.scatter(random(10), random(10), marker='x', color=colors[0])
ll = plt.scatter(random(10), random(10), marker='o', color=colors[0])
l = plt.scatter(random(10), random(10), marker='o', color=colors[1])
a = plt.scatter(random(10), random(10), marker='o', color=colors[2])
h = plt.scatter(random(10), random(10), marker='o', color=colors[3])
hh = plt.scatter(random(10), random(10), marker='o', color=colors[4])
ho = plt.scatter(random(10), random(10), marker='x', color=colors[4])
plt.legend((lo, ll, l, a, h, hh, ho),
('Low Outlier', 'LoLo', 'Lo', 'Average', 'Hi', 'HiHi', 'High Outlier'),
scatterpoints=1,
loc='lower left',
ncol=3,
fontsize=8)
plt.show()
3D'de bir dağılım çizmek için plot
yöntemini kullanın, çünkü gösterge bir Axes3D
örneğinin scatter
yöntemi tarafından döndürüldüğü gibi Patch3DCollection
yöntemini desteklemez. İşaretleyici stilini belirtmek için, aşağıdaki örnekte görüldüğü gibi, bunu yöntem çağrısına konumsal bir argüman olarak dahil edebilirsiniz. İsteğe bağlı olarak, hem linestyle
hem de marker
parametrelerine argüman eklenebilir.
import matplotlib.pyplot as plt
from numpy.random import random
from mpl_toolkits.mplot3d import Axes3D
colors=['b', 'c', 'y', 'm', 'r']
ax = plt.subplot(111, projection='3d')
ax.plot(random(10), random(10), random(10), 'x', color=colors[0], label='Low Outlier')
ax.plot(random(10), random(10), random(10), 'o', color=colors[0], label='LoLo')
ax.plot(random(10), random(10), random(10), 'o', color=colors[1], label='Lo')
ax.plot(random(10), random(10), random(10), 'o', color=colors[2], label='Average')
ax.plot(random(10), random(10), random(10), 'o', color=colors[3], label='Hi')
ax.plot(random(10), random(10), random(10), 'o', color=colors[4], label='HiHi')
ax.plot(random(10), random(10), random(10), 'x', color=colors[4], label='High Outlier')
plt.legend(loc='upper left', numpoints=1, ncol=3, fontsize=8, bbox_to_anchor=(0, 0))
plt.show()
İşte bunu yapmanın daha kolay bir yolu (kaynak: burada):
import matplotlib.pyplot as plt
from numpy.random import rand
fig, ax = plt.subplots()
for color in ['red', 'green', 'blue']:
n = 750
x, y = rand(2, n)
scale = 200.0 * rand(n)
ax.scatter(x, y, c=color, s=scale, label=color,
alpha=0.3, edgecolors='none')
ax.legend()
ax.grid(True)
plt.show()
Ve bunu alacaksın:
Efsane özellikleri için buraya bir göz atın
Diğer cevaplar biraz karmaşık görünüyor, scatter fonksiyonuna sadece bir 'label' parametresi ekleyebilirsiniz ve bu, grafiğiniz için açıklama olacaktır.
import matplotlib.pyplot as plt
from numpy.random import random
colors = ['b', 'c', 'y', 'm', 'r']
lo = plt.scatter(random(10), random(10), marker='x', color=colors[0],label='Low Outlier')
ll = plt.scatter(random(10), random(10), marker='o', color=colors[0],label='LoLo')
l = plt.scatter(random(10), random(10), marker='o', color=colors[1],label='Lo')
a = plt.scatter(random(10), random(10), marker='o', color=colors[2],label='Average')
h = plt.scatter(random(10), random(10), marker='o', color=colors[3],label='Hi')
hh = plt.scatter(random(10), random(10), marker='o', color=colors[4],label='HiHi')
ho = plt.scatter(random(10), random(10), marker='x', color=colors[4],label='High Outlier')
plt.legend(loc='upper center', bbox_to_anchor=(0.5, -0.05),
fancybox=True, shadow=True, ncol=4)
plt.show()