Katakanlah saya memiliki beberapa data masukan:
data = np.random.normal(loc=100,scale=10,size=(500,1,32))
hist = np.ones((32,20)) # initialise hist
for z in range(32):
hist[z],edges = np.histogram(data[:,0,z],bins=np.arange(80,122,2))
Saya bisa memplotnya menggunakan imshow()
:
plt.imshow(hist,cmap='Reds')
mendapatkan:
Namun, nilai sumbu x tidak cocok dengan data masukan (yaitu rata-rata 100, berkisar dari 80 hingga 122). Oleh karena itu, saya ingin mengubah sumbu x untuk menunjukkan nilainya edges
.
Saya telah mencoba:
ax = plt.gca()
ax.set_xlabel([80,122]) # range of values in edges
...
# this shifts the plot so that nothing is visible
dan
ax.set_xticklabels(edges)
...
# this labels the axis but does not centre around the mean:
Adakah ide tentang bagaimana saya dapat mengubah nilai sumbu untuk mencerminkan data masukan yang saya gunakan?
python
numpy
matplotlib
atomh33ls
sumber
sumber
pcolor
alih-alihimshow
seperti yang disebutkan dalam jawaban ini .Jawaban:
Saya akan mencoba untuk menghindari mengubah
xticklabels
jika mungkin, jika tidak, itu bisa sangat membingungkan jika Anda misalnya overplot histogram Anda dengan data tambahan.Menentukan kisaran grid Anda mungkin yang terbaik dan
imshow
dengannya dapat dilakukan dengan menambahkanextent
kata kunci. Dengan cara ini sumbu diatur secara otomatis. Jika Anda ingin mengubah label yang akan saya gunakanset_xticks
dengan mungkin beberapa pemformat. Mengubah label secara langsung harus menjadi pilihan terakhir.fig, ax = plt.subplots(figsize=(6,6)) ax.imshow(hist, cmap=plt.cm.Reds, interpolation='none', extent=[80,120,32,0]) ax.set_aspect(2) # you may also use am.imshow(..., aspect="auto") to restore the aspect ratio
sumber
interpolation="none"
yang digunakan di sini, representasi data nyata yang jauh lebih akurat.Saya memiliki masalah serupa dan Google mengirim saya ke posting ini. Solusi saya sedikit berbeda dan kurang kompak, tapi semoga bisa bermanfaat bagi seseorang.
Menampilkan gambar Anda dengan matplotlib.pyplot.imshow umumnya merupakan cara cepat untuk menampilkan data 2D. Namun ini secara default memberi label sumbu dengan jumlah piksel. Jika data 2D yang Anda plot sesuai dengan beberapa kisi seragam yang ditentukan oleh larik x dan y, maka Anda dapat menggunakan matplotlib.pyplot.xticks dan matplotlib.pyplot.yticks untuk memberi label sumbu x dan y menggunakan nilai dalam larik tersebut. Ini akan mengaitkan beberapa label, sesuai dengan data kisi yang sebenarnya, dengan jumlah piksel pada sumbu. Dan melakukan ini jauh lebih cepat daripada menggunakan sesuatu seperti pcolor misalnya.
Berikut adalah upaya ini dengan data Anda:
import matplotlib.pyplot as plt # ... define 2D array hist as you did plt.imshow(hist, cmap='Reds') x = np.arange(80,122,2) # the grid to which your data corresponds nx = x.shape[0] no_labels = 7 # how many labels to see on axis x step_x = int(nx / (no_labels - 1)) # step between consecutive labels x_positions = np.arange(0,nx,step_x) # pixel count at label position x_labels = x[::step_x] # labels you want to see plt.xticks(x_positions, x_labels) # in principle you can do the same for y, but it is not necessary in your case
sumber