King_zkk 2019-05-10 14:01 采纳率: 50%
浏览 1369
已结题

Qt能否绘制二维三坐标曲线(双Y轴)。。就是左右Y坐标各代表简易坐标的X,Y。横坐标是时间。

新人求大神指点,能否做到这样,不能的话只能画三维空间坐标了吗?Matlab是不是可以实现?

  • 写回答

2条回答 默认 最新

  • Lxc_Seven 2019-05-15 16:58
    关注

    有个控件,zedgraph,可以满足你的需求

    public void CreateChart( ZedGraphControl zgc )
    {
    GraphPane myPane = zgc.GraphPane;

    // Set the titles and axis labels
    myPane.Title.Text = "Demonstration of Multi Y Graph";
    myPane.XAxis.Title.Text = "Time, s";
    myPane.YAxis.Title.Text = "Velocity, m/s";
    myPane.Y2Axis.Title.Text = "Acceleration, m/s2";

    // Make up some data points based on the Sine function
    PointPairList vList = new PointPairList();
    PointPairList aList = new PointPairList();
    PointPairList dList = new PointPairList();
    PointPairList eList = new PointPairList();

    // Fabricate some data values
    for ( int i=0; i<30; i++ )
    {
    double time = (double) i;
    double acceleration = 2.0;
    double velocity = acceleration * time;
    double distance = acceleration * time * time / 2.0;
    double energy = 100.0 * velocity * velocity / 2.0;
    aList.Add( time, acceleration );
    vList.Add( time, velocity );
    eList.Add( time, energy );
    dList.Add( time, distance );
    }

    // Generate a red curve with diamond symbols, and "Velocity" in the legend
    LineItem myCurve = myPane.AddCurve( "Velocity",
    vList, Color.Red, SymbolType.Diamond );
    // Fill the symbols with white
    myCurve.Symbol.Fill = new Fill( Color.White );

    // Generate a blue curve with circle symbols, and "Acceleration" in the legend
    myCurve = myPane.AddCurve( "Acceleration",
    aList, Color.Blue, SymbolType.Circle );
    // Fill the symbols with white
    myCurve.Symbol.Fill = new Fill( Color.White );
    // Associate this curve with the Y2 axis
    myCurve.IsY2Axis = true;

    // Generate a green curve with square symbols, and "Distance" in the legend
    myCurve = myPane.AddCurve( "Distance",
    dList, Color.Green, SymbolType.Square );
    // Fill the symbols with white
    myCurve.Symbol.Fill = new Fill( Color.White );
    // Associate this curve with the second Y axis
    myCurve.YAxisIndex = 1;

    // Generate a Black curve with triangle symbols, and "Energy" in the legend
    myCurve = myPane.AddCurve( "Energy",
    eList, Color.Black, SymbolType.Triangle );
    // Fill the symbols with white
    myCurve.Symbol.Fill = new Fill( Color.White );
    // Associate this curve with the Y2 axis
    myCurve.IsY2Axis = true;
    // Associate this curve with the second Y2 axis
    myCurve.YAxisIndex = 1;

    // Show the x axis grid
    myPane.XAxis.MajorGrid.IsVisible = true;

    // Make the Y axis scale red
    myPane.YAxis.Scale.FontSpec.FontColor = Color.Red;
    myPane.YAxis.Title.FontSpec.FontColor = Color.Red;
    // turn off the opposite tics so the Y tics don't show up on the Y2 axis
    myPane.YAxis.MajorTic.IsOpposite = false;
    myPane.YAxis.MinorTic.IsOpposite = false;
    // Don't display the Y zero line
    myPane.YAxis.MajorGrid.IsZeroLine = false;
    // Align the Y axis labels so they are flush to the axis
    myPane.YAxis.Scale.Align = AlignP.Inside;
    myPane.YAxis.Scale.Max = 100;

    // Enable the Y2 axis display
    myPane.Y2Axis.IsVisible = true;
    // Make the Y2 axis scale blue
    myPane.Y2Axis.Scale.FontSpec.FontColor = Color.Blue;
    myPane.Y2Axis.Title.FontSpec.FontColor = Color.Blue;
    // turn off the opposite tics so the Y2 tics don't show up on the Y axis
    myPane.Y2Axis.MajorTic.IsOpposite = false;
    myPane.Y2Axis.MinorTic.IsOpposite = false;
    // Display the Y2 axis grid lines
    myPane.Y2Axis.MajorGrid.IsVisible = true;
    // Align the Y2 axis labels so they are flush to the axis
    myPane.Y2Axis.Scale.Align = AlignP.Inside;
    myPane.Y2Axis.Scale.Min = 1.5;
    myPane.Y2Axis.Scale.Max = 3;

    // Create a second Y Axis, green
    YAxis yAxis3 = new YAxis( "Distance, m" );
    myPane.YAxisList.Add( yAxis3 );
    yAxis3.Scale.FontSpec.FontColor = Color.Green;
    yAxis3.Title.FontSpec.FontColor = Color.Green;
    yAxis3.Color = Color.Green;
    // turn off the opposite tics so the Y2 tics don't show up on the Y axis
    yAxis3.MajorTic.IsInside = false;
    yAxis3.MinorTic.IsInside = false;
    yAxis3.MajorTic.IsOpposite = false;
    yAxis3.MinorTic.IsOpposite = false;
    // Align the Y2 axis labels so they are flush to the axis
    yAxis3.Scale.Align = AlignP.Inside;

    Y2Axis yAxis4 = new Y2Axis( "Energy" );
    yAxis4.IsVisible = true;
    myPane.Y2AxisList.Add( yAxis4 );
    // turn off the opposite tics so the Y2 tics don't show up on the Y axis
    yAxis4.MajorTic.IsInside = false;
    yAxis4.MinorTic.IsInside = false;
    yAxis4.MajorTic.IsOpposite = false;
    yAxis4.MinorTic.IsOpposite = false;
    // Align the Y2 axis labels so they are flush to the axis
    yAxis4.Scale.Align = AlignP.Inside;
    yAxis4.Type = AxisType.Log;
    yAxis4.Scale.Min = 100;

    // Fill the axis background with a gradient
    myPane.Chart.Fill = new Fill( Color.White, Color.LightGoldenrodYellow, 45.0f );

    zgc.AxisChange();
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题