在 matplotlib 箱形图中记录 x 尺度
Log x-scale in matplotlib box plot
我有一个看似简单的问题。也许只是我误用了这个库,但我不知道什么是正确的语法。
我必须根据一组数据制作箱线图。我希望将 x 轴设置为对数刻度,但只写 plt.xscale('log')
会使 x 轴消失。
这是我的代码:
import matplotlib.pyplot as plt
# .. data analysis here ...
plt.boxplot(values, positions = pos, widths = w)
plt.xscale('log')
plt.yscale('log')
plt.show()
生成的图像是:
没关系,除了没有出现 x 轴这一事实。这个问题有简单的解决方法吗?
谢谢!非常感谢任何建议!
尝试使用 plt.autoscale()
或手动设置 x 轴的范围:
import matplotlib.pyplot as plt
import numpy as np
# fake up some data
spread = np.random.rand(50) * 100
center = np.ones(25) * 50
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
data = np.concatenate((spread, center, flier_high, flier_low), 0)
spread = np.random.rand(50) * 100
center = np.ones(25) * 40
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
d2 = np.concatenate((spread, center, flier_high, flier_low), 0)
data.shape = (-1, 1)
d2.shape = (-1, 1)
data = [data, d2, d2[::2, 0]]
plt.figure()
plt.boxplot(data)
plt.xscale('log')
plt.yscale('log')
plt.autoscale(True)
plt.show()
我有一个看似简单的问题。也许只是我误用了这个库,但我不知道什么是正确的语法。
我必须根据一组数据制作箱线图。我希望将 x 轴设置为对数刻度,但只写 plt.xscale('log')
会使 x 轴消失。
这是我的代码:
import matplotlib.pyplot as plt
# .. data analysis here ...
plt.boxplot(values, positions = pos, widths = w)
plt.xscale('log')
plt.yscale('log')
plt.show()
生成的图像是:
没关系,除了没有出现 x 轴这一事实。这个问题有简单的解决方法吗?
谢谢!非常感谢任何建议!
尝试使用 plt.autoscale()
或手动设置 x 轴的范围:
import matplotlib.pyplot as plt
import numpy as np
# fake up some data
spread = np.random.rand(50) * 100
center = np.ones(25) * 50
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
data = np.concatenate((spread, center, flier_high, flier_low), 0)
spread = np.random.rand(50) * 100
center = np.ones(25) * 40
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
d2 = np.concatenate((spread, center, flier_high, flier_low), 0)
data.shape = (-1, 1)
d2.shape = (-1, 1)
data = [data, d2, d2[::2, 0]]
plt.figure()
plt.boxplot(data)
plt.xscale('log')
plt.yscale('log')
plt.autoscale(True)
plt.show()