在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()
,图表如下:
正如您所见,图表在顶部被裁剪,我缺少有关情节D的信息。预期结果将是:
在这种情况下,(0.0, 4917.985892131057)
为get_ylim()
。
我通过手动输入ylim获得了第二张图。
你可以让我知道我做错了什么吗?为什么我的示例中没有从“D”图中获得(-613.14902407399052, 16197.881540891121)
?
非常感谢提前!
答案 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()