我正在绘制地震学数据,并正在创建一个由16个不同深度切片组成的图形。每个子图显示震中的lat/lon,颜色被缩放到它的大小。我想做两件事:
我已经看到了很多种方法,但我很难将它们应用到代码中的循环中。我使用的数据是:数据。
我在下面发布了我的代码和当前输出的样子。
import matplotlib.pyplot as plt
import pandas as pd
eq_df = pd.read_csv(eq_csv)
eq_data = eq_df[['LON', 'LAT', 'DEPTH', 'MAG']]
nbound = max(eq_data.LAT)
sbound = min(eq_data.LAT)
ebound = max(eq_data.LON)
wbound = min(eq_data.LON)
xlimit = (wbound, ebound)
ylimit = (sbound, nbound)
magmin = min(eq_data.MAG)
magmax = max(eq_data.MAG)
for n in list(range(1,17)):
km = eq_data[(eq_data.DEPTH > n - 1) & (eq_data.DEPTH <= n)]
plt.subplot(4, 4, n)
plt.scatter(km["LON"], km['LAT'], s = 10, c = km['MAG'], vmin = magmin, vmax = magmax) #added vmin/vmax to scale my magnitude data
plt.ylim(sbound, nbound) # set y limits of plot
plt.xlim(wbound, ebound) # set x limits of plot
plt.tick_params(axis='both', which='major', labelsize= 6)
plt.subplots_adjust(hspace = 1)
plt.gca().set_title('Depth = ' + str(n - 1) +'km to ' + str(n) + 'km', size = 8) #set title of subplots
plt.suptitle('Magnitude of Events at Different Depth Slices, 1950 to Today')
plt.show()

ETA:解决我问题的新代码
发布于 2020-01-22 22:59:35
最后,多亏了上面的一些帮助和一些扩展的googling,终于得到了它。
我已经更新了上面的代码,说明代码是在哪里添加的。
为了调整我使用的绘图轴的限制,我使用:
plt.ylim(sbound, nbound)
plt.xlim(wbound, ebound)若要在所有添加vmin、vmax的绘图中缩放我的震级数据,请将vmax添加到以下行:
plt.scatter(km["LON"], km['LAT'], s = 10, c = km['MAG'], vmin = magmin, vmax = magmax)由此得出的数字如下:

发布于 2020-01-23 23:16:56
作为对另一个答案中的这句话的响应,这里演示了如何在这个用例中使用sharex=True和sharey=True:
import matplotlib.pyplot as plt
import numpy as np
# Supply the limits since random data will be plotted
wbound = -0.1
ebound = 1.1
sbound = -0.1
nbound = 1.1
fig, axs = plt.subplots(nrows=4, ncols=4, figsize=(16,12), sharex=True, sharey=True)
plt.xlim(wbound, ebound)
plt.ylim(sbound, nbound)
for n, ax in enumerate(axs.flatten()):
ax.scatter(np.random.random(20), np.random.random(20),
c = np.random.random(20), marker = '.')
ticks = [n % 4 == 0, n > 12]
ax.tick_params(left=ticks[0], bottom=ticks[1])
ax.set_title('Depth = ' + str(n - 1) +'km to ' + str(n) + 'km', size = 12)
plt.suptitle('Magnitude of Events at Different Depth Slices, 1950 to Today', y = 0.95)
plt.subplots_adjust(wspace=0.05)
plt.show()

对几件事的解释:
subplots_adjust(wspace=0.05)缩小了子图之间的水平间距plt.suptitle不需要(也不应该)在循环中。ticks = [n % 4 == 0, n > 12]为每个轴创建一对bool,然后用于控制绘制哪些滴答标记。ax.tick_params(left=ticks[0], bottom=ticks[1])控制每个轴的左和下勾标。plt.xlim()和plt.ylim()只需要在循环之前调用一次https://stackoverflow.com/questions/59867709
复制相似问题