kullanılarak 1D çubuk grafiklerle yanlış hizalanır. Bir olayın meydana gelmesi üzerine iki değişkenin etkisini görselleştirmek için matplotlib kullanarak 2d histogramı çizmek istiyorum.Olayların 2D histogramı, olay olasılığı x ve y eksenleri python ve matplotlib
Test durumumda, olay “gerçekleşme dileği” dir ve x
değişkeni düşen yıldız sayısıdır ve y
bir peri vaftizcisinin katılımıdır. Yapmak istediğim şey, düşen yıldızların ve peri tanrıçalarının çöp kutuları için gerçek olan 2d'lik bir histogram grafiğini çizmektir. Sonra her bir eksenin yanında, düşen her yıldız ve peri godmothers (her bir histogram kutusu için olasılıkları içeren 1D çubuk grafik) için olay/olay (olaysız) gerçek olma olasılığını göstermek istiyorum. Çubuk grafik kutuları 2d histogram kutuları ile uyumlu olmalı ve hizalanmalıdır. Bununla birlikte, çubuk grafikler ve histogram kutuları arasında küçük bir yanlış hizalama var gibi görünüyor.
Çubuk grafiğin doğru şekilde hizalanması için, ilk ve son bölme kenarlarına karşılık gelen eksen sınırlarının ayarları hile yapar mı? Bu sınırlar ayarlandıktan sonra, bin merkezlerini plt.bar()
dizinlerine dizinlerin aksine eksenler olarak besleyebilir miyim? aşağıdaki gibi
Kodum ve elde edilen görüntülerdir: benim orijinal kod işlevsel iken
import numpy as np
import matplotlib.pyplot as plt
from numpy import linspace
import cubehelix
# Create random events and non-events
x_noneve = 3.*np.random.randn(10000) +22.
np.random.seed(seed=41)
y_noneve = np.random.randn(10000)
np.random.seed(seed=45)
x_eve = 3.*np.random.randn(1000) +22.
np.random.seed(seed=33)
y_eve = np.random.randn(1000)
x_all = np.concatenate((x_eve,x_noneve),axis=0)
y_all = np.concatenate((y_eve,y_noneve),axis=0)
# Set up default x and y limits
xlims = [min(x_all),max(x_all)]
ylims = [min(y_all),max(y_all)]
# Set up your x and y labels
xlabel = 'Falling Star'
ylabel = 'Fairy Godmother'
# Define the locations for the axes
left, width = 0.12, 0.55
bottom, height = 0.12, 0.55
bottom_h = left_h = left+width+0.03
# Set up the geometry of the three plots
rect_wishes = [left, bottom, width, height] # dimensions of wish plot
rect_histx = [left, bottom_h, width, 0.25] # dimensions of x-histogram
rect_histy = [left_h, bottom, 0.25, height] # dimensions of y-histogram
# Set up the size of the figure
fig = plt.figure(1, figsize=(9.5,9))
fig.suptitle('Wishes coming true', fontsize=18, fontweight='bold')
cx1 = cubehelix.cmap(startHue=240,endHue=-300,minSat=1,maxSat=2.5,minLight=.3,maxLight=.8,gamma=.9)
# Make the three plots
axWishes = plt.axes(rect_wishes) # wishes plot
axStarx = plt.axes(rect_histx) # x bar chart
axFairy = plt.axes(rect_histy) # y bar chart
# Define the number of bins
nxbins = 50
nybins = 50
nbins = 100
xbins = linspace(start = xlims[0], stop = xlims[1], num = nxbins)
ybins = linspace(start = ylims[0], stop = ylims[1], num = nybins)
xcenter = (xbins[0:-1]+xbins[1:])/2.0
ycenter = (ybins[0:-1]+ybins[1:])/2.0
delx = np.around(xbins[1]-xbins[0], decimals=2,out=None)
dely = np.around(ybins[1]-ybins[0], decimals=2,out=None)
H, xedges,yedges = np.histogram2d(y_eve,x_eve,bins=(ybins,xbins))
X = xcenter
Y = ycenter
H = np.where(H==0,np.nan,H) # Remove 0's from plot
# Plot the 2D histogram
cax = (axWishes.imshow(H, extent=[xlims[0],xlims[1],ylims[0],ylims[1]],
interpolation='nearest', origin='lower',aspect="auto",cmap=cx1))
#Plot the axes labels
axWishes.set_xlabel(xlabel,fontsize=14)
axWishes.set_ylabel(ylabel,fontsize=14)
#Set up the plot limits
axWishes.set_xlim(xlims)
axWishes.set_ylim(ylims)
#Set up the probability bins
x_eve_hist, xoutbins = np.histogram(x_eve, bins=xbins)
y_eve_hist, youtbins = np.histogram(y_eve, bins=ybins)
x_noneve_hist, xoutbins = np.histogram(x_noneve, bins=xbins)
y_noneve_hist, youtbins = np.histogram(y_noneve, bins=ybins)
probax = [eve/(eve+noneve+0.0) if eve+noneve>0 else 0 for eve,noneve in zip(x_eve_hist,x_noneve_hist)]
probay = [eve/(eve+noneve+0.0) if eve+noneve>0 else 0 for eve,noneve in zip(y_eve_hist,y_noneve_hist)]
probax = probax/np.sum(probax)
probay = probay/np.sum(probay)
probax = np.round(probax*100., decimals=0, out=None)
probay = np.round(probay*100., decimals=0, out=None)
#Plot the bar charts
#Set up the limits
axStarx.set_xlim(xlims[0], xlims[1])
axFairy.set_ylim(ylims[0], ylims[1])
axStarx.bar(xcenter, probax, align='center', width =delx, color = 'royalblue')
axFairy.barh(ycenter,probay,align='center', height=dely, color = 'mediumorchid')
#Show the plot
plt.show()
Merhaba ve hoş geldiniz. Kodunuzda * sorun var mı? İşe yaramış gibi görünüyor, neyin daha iyi ve neyin olmadığıyla ilgili insanların fikirlerini soruyorsunuz. Bu mutlaka ilgili olan şey değil. Bu arada çok güzel araziler;) –
Teşekkürler :) ve SO'nın kötüye kullanımı için özür dilerim (yeni olduğumu görebildiğiniz gibi). Bu kodla ilgili temel sorunlar (i) çubuk grafik kutularının doğru hizalanmasını elde etmekti - xy ekseni sınırlarının ayarlanmasının ve ardından merkezlerin kullanılmasının çubuk grafik ile mükemmel hizalamaya neden olmasını sağlamak istedim. 2d histo ve (ii) imshow'un kullanımı. Bu kodun çok daha karmaşık bir versiyonunda, imshow'u “üst” ve “alt” olarak adlandırmayı denedim, ama her zaman baklavalarla karşılaştırıldığında ters çevrilmiş görünüyordu. Maalesef, daha karmaşık sürümü yayınlayamıyorum. – SpicyBaguette
Bunu gördünüz mü: http://matplotlib.org/examples/pylab_examples/scatter_hist.html? –