2017-01-12 90 views
1

在具有顏色編碼點此緯度/經度散點圖:Matplotlib pyplot 2D散射沒有軸,添加共享軸標籤

我想有沒有軸但具有用於x軸的共用標籤和y軸。所有我嘗試使用軸標籤都會失敗,因爲標籤在沒有可見軸的情況下不顯示。

下面列出了沒有這些錯誤的工作代碼。

import pandas as pd 
import matplotlib.pyplot as plt 

df = pd.read_csv("_test.csv") 
power = df['n'] 
lat = df['latitude'] 
lon = df['longitude'] 

df = pd.read_csv("shifted3.csv") 
power = df['n'] 
lat = df['latitude'] 
lon = df['longitude'] 
plt.subplot(121) 
plt.scatter(lon, lat, c=power,s=65, vmin=0, vmax=3700) 
# c= sets how the points are coloured, s= point size, vmin/max colour lims 
plt.title('a) AGW') 
plt.ylim(ymin=51.44,ymax=51.73) 
plt.xlim(xmin=1.42, xmax=1.63) 
plt.axis('off') 
cbar = plt.colorbar() 
cbar.ax.set_yticklabels(['0','','','','','','','','','3600']) 

plt.subplot(122) 
#plt.figure(figsize=(5,10)) 
plt.scatter(lon, lat, c=power,s=65, vmin=0, vmax=3700) 
# c= sets how the points are coloured, s= point size, vmin/max colour lims 
plt.title('b) no event') 
plt.xlim(xmin=2.23, xmax=2.45) 
plt.ylim(ymax=52.09) 
plt.axis('off') 
# # 
cbar = plt.colorbar() 
cbar.ax.set_yticklabels(['0','','800','','1600','','2400','','','3600']) 
cbar.set_label('Power (kW)', rotation=270, labelpad=+12) 
#labelpad + moves legend to right, - to left 

plt.show() 
+0

這並回答你的問題? http://stackoverflow.com/questions/29041326/3d-plot-with-matplotlib-hide-axes-but-keep-axis-labels – periphreal

+1

很難理解你真正想達到的目標。 「我想要沒有座標軸」 - 您顯示的座標圖沒有任何座標軸。 「...但爲x軸和y軸共享標籤」x和y如何共享標籤?該標籤在哪裏? – ImportanceOfBeingErnest

+0

道歉@ImportanceOfBeingErnest,我的意思是在兩個情節的左邊的subplots和一個單一的y軸共享x標籤。 –

回答

2

使用plt.axis("off")殺死所有內容:軸邊界,標籤,tickmarks和ticklabels。

如果想保留其中的一部分,則必須單獨關閉。
通過ax.xaxis.set_visible(False)可以使蜱蟲不可見。
可以通過ax.spines["bottom"].set_visible(False)將邊框設置爲不可見。

整個圖下方的標籤可以通過plt.figtext(x, y, text)進行設置。

把所有這些組合起來,給人

import pandas as pd 
import matplotlib.pyplot as plt 
import numpy as np 


power = np.random.rand(32)*3600 
lat = 51.45 + 0.26*np.random.rand(32) 
lon = 1.44 + 0.18*np.random.rand(32) 


plt.subplot(121) 
plt.scatter(lon, lat, c=power,s=65, vmin=0, vmax=3700) 
# c= sets how the points are coloured, s= point size, vmin/max colour lims 
plt.title('a) AGW') 
plt.ylim(ymin=51.44,ymax=51.73) 
plt.xlim(xmin=1.42, xmax=1.63) 
#plt.axis('off') 
cbar = plt.colorbar() 
cbar.ax.set_yticklabels(['0','','','','','','','','','3600']) 

ax = plt.gca() 
ax.set_ylabel("Some y label") 

#Make x axis and all spines but left one invisible 
ax.xaxis.set_visible(False) 
for position in ["right", "top", "bottom"]: 
    ax.spines[position].set_visible(False) 
# Only show ticks on the left spine 
ax.yaxis.set_ticks_position('left') 

plt.subplot(122) 
#plt.figure(figsize=(5,10)) 
plt.scatter(lon, lat, c=power,s=65, vmin=0, vmax=3700) 
# c= sets how the points are coloured, s= point size, vmin/max colour lims 
plt.title('b) no event') 
plt.xlim(xmin=1.42, xmax=1.63) 
plt.ylim(ymin=51.44,ymax=51.73) 
#plt.axis('off') 
# # 
cbar = plt.colorbar() 
cbar.ax.set_yticklabels(['0','','800','','1600','','2400','','','3600']) 
cbar.set_label('Power (kW)', rotation=270, labelpad=+12) 
#labelpad + moves legend to right, - to left 
ax = plt.gca() 
ax.xaxis.set_visible(False) 
ax.yaxis.set_visible(False) 
for position in ["left","right", "top", "bottom"]: 
    ax.spines[position].set_visible(False) 
# Add some text below the subplots 
plt.figtext(0.5, 0.05, "Some x label beneath the whole figure", ha="center") 

plt.show() 

enter image description here