100分求助: MSchart控件的xy散点图怎么画

wdq007 2003-10-16 11:55:12
我要达到的功能
1。x轴从0~10
2。y轴从0~100
3。绘制10个点并连成曲线

我开始是用折线图的,但是折线图的起点的X坐标不在坐标原点上。后来我用xy散点图,但是出来的图x轴和y轴的单位长度是一样的,也就是说Y轴最大数值为100是x轴最大数值的十倍,结果出来的图变成一个高宽比为10:1的坐标图。

哪位大大能帮我解决这个问题,一定高分相送。
...全文
392 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wdq007 2003-10-17
  • 打赏
  • 举报
回复
顶一下,哪位高人能帮我解决这鬼问题呀~~~~~
yushulei 2003-10-16
  • 打赏
  • 举报
回复
上面是从我程序中考过来的,可能由点乱。
那个data是自定义的一个数据类。你可以定义为一个二位数组,存放点的坐标,然后画出来就行了。
LuckFox 2003-10-16
  • 打赏
  • 举报
回复
关注!
yushulei 2003-10-16
  • 打赏
  • 举报
回复
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);
}
daylight1980 2003-10-16
  • 打赏
  • 举报
回复
我觉得要实现的功能没有这么复杂吧。
就折线图可以了。
坐标可以设定的吗!
wdq007 2003-10-16
  • 打赏
  • 举报
回复
我觉得是散点图的赋值有点问题,但是xy散点图该怎么赋值呢?
lsl7909 2003-10-16
  • 打赏
  • 举报
回复
UP
wdq007 2003-10-16
  • 打赏
  • 举报
回复
好象还是不行,连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;
}


15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧