图表中有规律的刻度是如何实现的?

本文详细介绍了如何在Matlab或Word中为图表生成具有规律性的X轴和Y轴刻度的方法。通过计算数据范围内的最大最小值差,确定步长和刻度个数,进而生成合适的刻度规则。此过程涉及数学计算,包括对数值的有效位数进行分析,以确保刻度既符合视觉美观又便于解读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家在用Matlab或word的时候发现它们的图表的X轴和Y轴上的刻度都是非常有规律的,比如都是0、1、2、3、4、5……

或者是5、10、15、20……或者是0.2、0.4、0.6、0.8…… 或者是100、200、300、400……

它们是怎么根据我们的数据范围得到这些有规律的值的呢?

由于我们项目中也要用到类似的功能所以请教了项目组的数学高手,发现采用下的方法可以实现这个功能,废话

不多说,直接上代码:

void GetRules(float minValue,float maxValue,QList<float>& rules)
{
	rules.clear();
	if(maxValue<=minValue) return;
	//计算最大最小值之差
	double length =maxValue - minValue;
	//确定步长和刻度个数
	float step = 0;              //步长只能为1,2,5
	int ruleCount = 5;     //刻度个数
	//获取第一位或前两位有效数字
	int npt = (int)(log10(length));            
	int fSD = (int)(length * pow(10.0f, -1*npt));  //第一位有效数字
	if (fSD <= 3)
	{
		//如果为1,2,3则取前两位有效数字
		int dSD = (int)(length * pow(10.0f, -1 * (npt-1)));  //前两位有效数字
		if (dSD <= 12)
		{
			step = (float)(2 * pow(10.0f, npt-1));
			ruleCount = dSD / 2;
		}
		else
		{
			step = (float)(5 * pow(10.0f, npt - 1));
			ruleCount = dSD / 5;
		}
	}
	else if (fSD <= 7)
	{
		//如果大于等于4,小于等于7,则步长为1
		step = (float)(1 * pow(10.0f, npt));
		ruleCount = fSD;
	}
	else
	{
		//如果大于等于8,则步长为2
		step = (float)(2 * pow(10.0f, npt));
		ruleCount = fSD/2;
	}
	//到目前为止已经得到了step和ruleCount
	///获取起始点
	float startValue = (int)(minValue / step) * step;
	for (int i = 0; i < ruleCount+5;i++ )
	{
		float d = startValue + i * step;
		if (d >= minValue && d <= maxValue)
		{
			rules.push_back(d);   //添加刻度
		}                
	}
}

这是获取刻度的函数,最后的刻度值会保存在rules中,minValue是我们图标要显示的最下值,maxValue是我们图标要显示的最大值。
### 设置或更改MATLAB形中y轴的刻度 在 MATLAB 中,可以通过多种方式来设置或更改 y 轴的刻度。以下是几种常用的方法: #### 方法一:使用 `yticks` 函数 可以直接通过调用 `yticks` 函数指定新的 y 轴刻度位置[^1]。 ```matlab figure; plot([0 1 2 3], [0 1 4 9]); yticks([0 2 4 6 8 10]) ``` 此方法适用于简单的线性图表,在创建形之后立即调整其 y 轴上的标记点。 #### 方法二:利用属性设置命令 对于更复杂的定制需求,则可以采用设定当前坐标区对象 (Axes Object) 的属性的方式来进行操作[^2]。 ```matlab ax = gca; % 获取当前坐标区句柄 set(ax, 'YTick', [-5 -2 0 2 5]); % 自定义 Y 轴刻度值 ``` 这种方法允许更加灵活地控制各个细节参数,并且能够作用于任何类型的二维绘函数产生的像之上。 #### 方法三:处理双 y 轴情况下的特殊情形 当涉及到带有两个不同比例尺的纵坐标的复合型统计时,可能需要单独对待每一边的情况并分别施加相应的格式化指令[^3]。 ```matlab % 创建带双 y 轴的数据可视化实例 [x, y1, y2] = deal(linspace(0, pi), sin(linspace(0,pi)), exp(linspace(0,pi))); yyaxis left % 切换至左侧 y 轴模式下工作 plot(x, y1); % 绘制左边数据序列 ylabel('Sine Value'); % 添加标签说明 ylim([-1.5 1.5]) % 设定界限范围 yticklabels({'-1.5','-1','-.5','0','.5','1','1.5'}) % 定义自定义标签文字串数组作为新刻度名称列表 yyaxis right % 改变目标为右边部分继续绘制另一组关联曲线 semilogy(x, abs(y2)); % 使用半对数形式展现指数增长趋势特征 title('Example of Customizing Ticks on Dual-Y Plots'); xlabel('X Axis Title Here'); ylabel('|Exponential| Values'); yticks(logspace(-1, log10(max(abs(y2))), 7)) ; % 对右侧应用特定间隔分布规律的一系列数值作为了最终呈现效果里的分隔符选项之一 ``` 上述代码片段展示了如何针对具有双重垂直方向测量单位的不同信号源实施差异化管理策略的同时保持整体布局美观协调一致的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值