结合大熊猫情节时ylim的问题

时间:2017-11-28 10:52:02

标签: python pandas matplotlib

在Pandas中将区域图与线图结合使用时,我的y轴比例存在问题。

这是一个例子来说明它:

df= pd.DataFrame(abs(np.random.randn(50, 4)), columns=list('ABCD'))
for col in ["A", "B", "C"]:
    df[col]=df[col]*1000
df["D"]=df["D"]*5000

fig, ax = plt.subplots(figsize=(28, 10))
ax=df[["A", "B", "C"]].plot.area(ax=ax)
ax=df["D"].plot.line(ax=ax, color='red')
print(ax.get_ylim())
ax.margins(0, 0)
ax.legend_.remove()
plt.show()
<{1}}的结果是:ax.get_ylim()

,图表如下:

enter image description here

正如您所见,图表在顶部被裁剪,我缺少有关情节D的信息。预期结果将是:

enter image description here

在这种情况下,(0.0, 4917.985892131057)get_ylim()

我通过手动输入ylim获得了第二张图。

你可以让我知道我做错了什么吗?为什么我的示例中没有从“D”图中获得(-613.14902407399052, 16197.881540891121)

非常感谢提前!

2 个答案:

答案 0 :(得分:0)

我认为这是因为绘制的第一组数据最初设定了限制。尝试切换它们:

"D"

但这又取决于数据,只有ylim总是大于其他数据时它才会起作用。您可以添加一行来自动更新ax.set_ylim(top=df.values.max()) ,如下所示:

Gson gson = new Gson();
MyProfile obj = new MyProfile();
String jsonInString = gson.toJson(obj);
// pass string object to next activity and convert string object to class.
//next activity write this code.
MyProfile obj= gson.fromJson(jsonInString, MyProfile.class);

答案 1 :(得分:0)

您可以使用import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MenyTest extends JFrame { JPanel panel; JMenuBar menyrad; JMenu fargmeny, svmeny; JMenuItem rod, gron, bla, svart, gra, vit; public MenyTest () { panel = new JPanel(); panel.setBackground(Color.white); add(panel); menyrad = new JMenuBar(); fargmeny = new JMenu("Färger"); svmeny = new JMenu("SvartVitt"); this.setJMenuBar(menyrad); menyrad.add(fargmeny); menyrad.add(svmeny); rod = new JMenuItem("Röd"); gron = new JMenuItem("Grön"); bla = new JMenuItem("Blå"); svart = new JMenuItem("Svart"); gra = new JMenuItem("Grå"); vit = new JMenuItem("Vit"); fargmeny.add(rod); fargmeny.add(gron); fargmeny.add(bla); svmeny.add(svart); svmeny.add(gra); svmeny.add(vit); } public static void main(String[] args) { MenyTest f = new MenyTest(); f.setSize(500, 500); f.setLocation(400, 150); f.setTitle("MenyTest"); f.setDefaultCloseOperation(MenyTest.EXIT_ON_CLOSE); f.setVisible(true); } public class Meny extends JFrame implements ActionListener { public void actionPerformed(ActionEvent e) { rod.addActionListener(this); gron.addActionListener(this); bla.addActionListener(this); svart.addActionListener(this); gra.addActionListener(this); vit.addActionListener(this); if (e.getSource() == rod) panel.setBackground(Color.red); else if (e.getSource() == gron) panel.setBackground(Color.green); else if (e.getSource() == bla) panel.setBackground(Color.blue); else if (e.getSource() == svart) panel.setBackground(Color.black); else if (e.getSource() == gra) panel.setBackground(Color.gray); else if (e.getSource() == vit) panel.setBackground(Color.white); } 手动设置y轴限制。但我认为最好的方法是使用ax.set_ylim(),如@ImportanceOfBeingErnest所建议的那样

ax.autoscale()

enter image description here