Matplotlib pyplot 2d 散点无轴,添加共享轴标签

Matplotlib pyplot 2d scatter no axes, add shared axis labels

在这个 latitude/longitude 带有颜色编码点的散点图中:

我想要没有轴但有一个共享的 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()

使用 plt.axis("off") 会杀死所有内容:轴边界、标签、刻度线和刻度标签。

如果有人想保留其中一些,则必须单独将其关闭。
可以通过 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()