不同尺度的Matplotlib双胞胎

时间:2017-02-26 10:00:05

标签: python python-3.x matplotlib

我使用matplotlib twinx在同一轴上绘制多个变量。但我有一个问题,我无法找到解决方案。为简单起见,我在下面的代码中附加了很少的代码和图表 在这张照片中,我需要将这些条显示在轴的底部,如图2所示。但在图2中,ax1t的yticks保持不变。我还需要它们显示在底部。我怎么能这样做?

代码:

import matplotlib.pyplot as plt
import numpy as np

fig, ax1 = plt.subplots()
ax1.plot([4, 2, 8, 6, 4, 7, 3, 5])
ax1t = ax1.twinx()
ax1t.bar(np.arange(8), [45, 42, 55, 36, 58, 45, 48, 62], alpha=0.4)
plt.show()

enter image description here

图片2 enter image description here

3 个答案:

答案 0 :(得分:4)

我想这就是你想要的 -

import matplotlib.pyplot as plt
import numpy as np

fig, ax1 = plt.subplots()
ax1.plot([4, 2, 8, 6, 4, 7, 3, 5])
ax1t = ax1.twinx()

ax1t.bar(np.arange(8), [45, 42, 55, 36, 58, 45, 48, 62], alpha=0.4)
ax1t.set_ylim([10,500])
ax1t.set_yticks([10, 50, 90])
plt.show()

使用set_ylim更改y轴刻度,然后使用set_yticks显式传递y刻度。您可以根据自己的方便使用参数进行调整。

enter image description here

答案 1 :(得分:1)

from matplotlib examples

import matplotlib.pyplot as plt
import numpy as np


f, (ax1, ax2) = plt.subplots(2, sharex=True, sharey=True)
ax1.plot([4, 2, 8, 6, 4, 7, 3, 5])
ax2.bar(np.arange(8), [45, 42, 55, 36, 58, 45, 48, 62], alpha=0.4)

# Fine-tune figure; make subplots close to each other and hide x ticks for
# all but bottom plot.
f.subplots_adjust(hspace=0)
plt.setp([a.get_xticklabels() for a in f.axes[:-1]], visible=False)

plt.show()

enter image description here

答案 2 :(得分:0)

您还可以使用Plotly库,该库可以轻松实现出色的可视化效果。

import plotly.plotly as py
import plotly.graph_objs as go

trace1 = go.Scatter(
    x=[0, 1, 2, 3, 4, 5],
    y=[1.5, 1, 1.3, 0.7, 0.8, 0.9]
)
trace2 = go.Bar(
    x=[0, 1, 2, 3, 4, 5],
    y=[1, 0.5, 0.7, -1.2, 0.3, 0.4]
)

data = [trace1, trace2]
py.iplot(data, filename='bar-line')

结果(它是.png格式,因此不是交互式的) enter image description here