我要达到的功能
1。x轴从0~10
2。y轴从0~100
3。绘制10个点并连成曲线我开始是用折线图的,但是折线图的起点的X坐标不在坐标原点上。后来我用xy散点图,但是出来的图x轴和y轴的单位长度是一样的,也就是说Y轴最大数值为100是x轴最大数值的十倍,结果出来的图变成一个高宽比为10:1的坐标图。哪位大大能帮我解决这个问题,一定高分相送。

解决方案 »

  1.   

    CMSChart *pChart=(CMSChart*)GetDlgItem(mschart控件的id);
            VARIANT var;
    CVcValueScale yScale;//纵坐标对象
    CVcCategoryScale xScale;//横坐标对象

    yScale = pChart->GetPlot().GetAxis(1,var).GetValueScale(); 
    yScale.SetAuto(FALSE);
             xScale = pChart->GetPlot().GetAxis(0,var).GetCategoryScale();
    xScale.SetAuto(FALSE);
    pChart->SetColumnCount(1);
    pChart->SetRowCount(10);
    for(i=0;i<11;i++)
    {
    pChart->SetRow(i+1);
                                         CString strRowLabel;
    strRowLabel.Format("%d",i+1);
    pChart->SetRowLabel(strRowLabel);
    }
    pChart->SetColumn(1);
    for (int j = 0; j <11 ; j++)//nDataCount
    {
    pChart->SetRow(j+1);
    strData.Format("%.2f",data.m_fData[j]);
    pChart->SetData(strData);
    }
      

  2.   

    上面是从我程序中考过来的,可能由点乱。
    那个data是自定义的一个数据类。你可以定义为一个二位数组,存放点的坐标,然后画出来就行了。
      

  3.   

    好象还是不行,连mschart控件都显示不出来了,如果把下面的代码中禁止x,y轴自动缩放的代码注释掉,mschart可以显示,但是出来的图表就象我开贴里描述的一样。我不知道是不是我赋值的方法有问题?比如我现在想显示一个Y=X*X的曲线图,mschart的type是xy散点图,把mschart控件和m_chartsd变量绑定了代码如下:#include "vcaxis.h" 
    #include "vcplot.h"
    #include "vcaxisscale.h" 
    #include "vcvaluescale.h"
    #include "vccategoryscale.h"
    #include "vcdatagrid.h"BOOL mcfxsdtx::OnInitDialog() 
    {
    CDialog::OnInitDialog();

    m_chartsd.SetFootnoteText("测试mschart"); VARIANT var;
        m_chartsd.GetPlot().GetAxis(1,var).GetValueScale().SetAuto(FALSE);
        m_chartsd.GetPlot().GetAxis(0,var).GetCategoryScale().SetAuto(FALSE);    CString sLabel;    m_chartsd.SetColumnCount(1); //1个项目,1条曲线
        m_chartsd.SetRowCount(10); //显示10个刻度

    //设置坐标的
    for(int i=0;i<10;i++)
    {
    m_chartsd.SetRow(i+1);

    sLabel.Format("%d",i+1);
    m_chartsd.SetRowLabel(sLabel);
    }
    m_chartsd.SetColumn(1);
        // 以下代码段为给ms_chart控件绑定数据的代码
        COleSafeArray saRet;
        DWORD numElements[] = {10, 2}; // 10x2
        saRet.Create(VT_R8, 2, numElements); // Create the safe-array...
        // Initialize it with values...
        
        long index[2];
        double val;     for(index[0]=0; index[0]<10; index[0]++)
      {
    index[1]=0;
    val= index[0];
                      saRet.PutElement(index, &val); index[1]=1;
    val = index[0] * index[0];
                      saRet.PutElement(index, &val);
      }     // Return the safe-array encapsulated in a VARIANT...
         m_chartsd.SetChartData(saRet.Detach());
         m_chartsd.Refresh();

         return TRUE; 
    }