活动介绍

set(gca,'FontSize',15,'Fontname','Times New Roman'); set(gca,'XTick',0:2:40); set(gca,'YTick',0:2:40);

时间: 2024-01-22 19:04:09 浏览: 183
这是MATLAB中设置图形属性的代码,其中set(gca,'FontSize',15,'Fontname','Times New Roman')用于设置坐标轴字体大小为15,并使用Times New Roman字体;set(gca,'XTick',0:2:40)和set(gca,'YTick',0:2:40)则用于设置x轴和y轴的刻度范围为0到40,步长为2。
相关问题

set(gca,'XTick',0:4:24,'FontSize',14,'FontName','Times New Roman'); set(gca,'XTickLabel',{'0','4','8','12','16','20','24'});

### 设置MATLAB图形的X轴刻度和字体 为了实现特定需求,在MATLAB中可以按照以下方式设置X轴刻度并调整其字体属性: ```matlab % 假设已经有一个绘制好的图像 figure; plot(0:24, rand(1, 25)); % 创建一个简单的线形图作为例子 % 设置X轴刻度范围从0至24,每4单位放置一个刻度标记 set(gca, 'XTick', 0:4:24); % 修改坐标轴数字字体大小及名称 set(gca, 'FontName', 'Times New Roman', 'FontSize', 14); ``` 上述代码片段首先创建了一个简单图表用于展示目的。接着通过`set`函数配置当前坐标系(`gca`)下的X轴刻度位置,并指定了起始值、终止值以及步长;最后再次调用`set`来更改整个坐标系统的字体样式与尺寸[^1]。 对于含有中文字符的情况,可以通过TeX引擎进一步定制标签文字,确保不同语言的文字能够正确显示不同的字体风格。例如,如果希望在X轴上标注带有中文描述的时间信息,则可采用如下做法: ```matlab xlabel(['\fontname{宋体}时间(ms)'], 'FontName', 'Times New Roman', 'FontSize', 14); ``` 这段代码利用了MATLAB内置的支持LaTeX语法的功能,允许混合使用多种字体以适应国际化的需求[^2]。

``` figure; time_t=1:96; plot(time_t,data_sop1_p(1,:),time_t,data_sop2_p(1,:)); axis([1 96 -0.5 0.5]); set(gca,'XTick',0:4:96,'FontSize',14,'FontName','Times New Roman'); set(gca,'XTickLabel',{'0','4','8','12','16','20','24'}); xlabel('Time (h)','FontSize',14,'FontName','Times New Roman'); ylabel('有功功率P (MW)','FontSize',14,'FontName','Times New Roman'); legend('SOP 1-22','SOP 2-25'); hold on; plot(time_t,zeros(1, 96),'k-.'); figure; plot(time_t,data_sop1_q(1,:),time_t,data_sop1_q(2,:),time_t,data_sop2_q(1,:),time_t,data_sop2_q(2,:)); axis([1 96 -0.1 0.6]); set(gca,'XTick',0:4:96,'FontSize',14,'FontName','Times New Roman'); set(gca,'XTickLabel',{'0','4','8','12','16','20','24'}); xlabel('Time (h)','FontSize',14,'FontName','Times New Roman'); ylabel('无功功率Q (MVar)','FontSize',14,'FontName','Times New Roman'); legend('SOP 1-12','SOP 1-22','SOP 2-25','SOP 2-29','Location', 'best');```现在我要将里面的时间24点换成96点(每15min一点),怎么修改程序

<think>好的,我需要帮用户修改MATLAB代码,将时间从24点改为96点,每15分钟一个点。首先,用户提供的代码中已经正确设置了时间轴,因为`time_t=1:96`已经生成了96个点,每个点代表15分钟。所以时间数据本身不需要修改。 接下来,用户的问题是关于如何调整横坐标标签,让它们正确显示为0到24小时,每4小时一个标签。当前的代码使用`set(gca,'XTickLabel',{'0','4','8','12','16','20','24'});`来设置标签,但原来的时间范围是96点,即24小时,所以每个标签对应的是4小时间隔。然而,用户可能希望即使数据点增加到96个,横坐标仍然以小时为单位显示,从0到24小时,每4小时显示一次。 不过,查看用户现有的代码,发现他们已经在`set(gca,'XTick',0:4:96)`,这里可能存在问题。因为`time_t`是从1到96,而将XTick设置为0:4:96的话,最大的刻度是96,但数据范围是到96,所以可能需要调整XTick的位置。例如,如果数据是从1到96,那么刻度0可能不在图的左端,导致标签可能错位。因此,正确的做法应该是将XTick设置为1:4:96,这样每个4小时的间隔对应正确的数据点位置。但用户原来的代码中XTick是0:4:96,这会导致在x=0的位置没有数据,因为数据从1开始。这可能是一个错误,需要修正。 另外,用户可能希望保持标签为0到24小时,对应96个点。每个小时有4个点(15分钟),所以每4个点对应1小时。因此,每16个点对应4小时(因为4小时×4点/小时=16点)。因此,正确的XTick应该是1:16:96,这样每个刻度对应4小时的间隔,即0,4,8,...,24小时。但用户原来的代码中XTick是0:4:96,间隔是4个点,但每个点代表15分钟,所以4个点对应1小时,这样每隔4个点显示一次的话,标签会显示1小时,但用户原来的标签是每4小时显示一次,所以可能原来的设置是不正确的。 这可能意味着用户原来的代码存在错误,需要调整XTick的位置。例如,正确的XTick应该设置为每16个点(4小时×4点/小时),即1:16:96,或者0:16:96?需要根据数据的时间起点是1还是0来确定。用户当前的time_t是1:96,即第一个数据点是时间点1,对应0:15,但用户希望横坐标显示的是小时数,从0到24小时。因此,可能需要将时间变量调整为从0开始,例如time_t=0:95,这样每个点对应的时间为0小时到23.75小时,步长0.25小时。或者保持time_t=1:96,但将刻度设置在正确的小时位置。 这里可能存在混淆,需要理清。例如,用户希望横坐标标签显示的是小时数,从0到24,每4小时一个标签。每个小时有4个点,所以每4小时对应16个数据点。如果time_t是1:96,那么时间点对应的实际小时数为: 数据点1:0:15(0.25小时) 数据点2:0:30(0.5小时) 数据点3:0:45(0.75小时) 数据点4:1:00(1小时) ... 数据点96:24:00(24小时) 但用户可能希望将数据点对应到每个15分钟的起始点,比如数据点1对应0小时,数据点2对应0.25小时,依此类推。或者,可能time_t被定义为每个时间点的索引,从1到96,而实际的时间应该从0开始,以0.25小时为步长。因此,正确的做法可能是重新定义time_t为从0开始,步长0.25小时到23.75小时,总共有96个点。例如: time_t = 0:0.25:23.75; 或者,如果必须保持time_t为1到96的整数,那么在设置XTick时,需要将每个4小时对应的点位置计算出来。例如,4小时等于16个15分钟的点,因此,第一个刻度在1(对应0小时),然后1+16=17(4小时),依此类推,直到97?但time_t只到96,所以24小时对应第96个点?或者可能用户的数据是每个时间点代表一个15分钟的间隔,所以总共有24×4=96点,从0到95,对应0到23.75小时。这时,正确的刻度应该在0,16,32,...,96的位置,对应0,4,8,...,24小时。但time_t如果是1:96的话,那么0小时对应的是time_t=1,而24小时对应time_t=96。这时候,刻度位置应该设置为1:16:96,或者0:16:96?因为当time_t从1开始,每16个点增加4小时,所以刻度位置应为1(0h),17(4h),33(8h),...,97(24h),但time_t只到96,所以最后一个刻度应该是97,这超出了范围,所以可能需要调整到96的位置对应24h,即刻度为1,17,33,49,65,81,97,但最后一个可能超出,因此可能改为1,17,33,49,65,81,96,但这会导致间隔不一致。 这显然比较复杂,所以用户原来的代码中可能存在的错误在于XTick的设置。原来的代码中,用户将XTick设置为0:4:96,即每隔4个点一个刻度,而每个刻度标签设置为0,4,8,...,24小时。但每个刻度间隔4个点对应的是1小时,而不是4小时。因此,原来的XTickLabel是错误的,导致横坐标显示的是每1小时一个标签,但标签文本却是每4小时。例如,刻度0对应0小时,刻度4对应1小时,刻度8对应2小时,但标签却显示4小时,这显然不对。 所以用户的问题可能不仅仅是修改标签,而是整个刻度设置不正确。用户希望将时间轴显示为0到24小时,每4小时一个标签,正确的做法应该是每隔16个点设置一个刻度(因为4小时×4点/小时=16点)。因此,在原来的代码中,应该将XTick设置为1:16:96,这样每个刻度对应4小时的间隔,然后标签设置为0,4,8,...,24。然而,用户原来的代码中XTick是0:4:96,而XTickLabel是0到24,每4小时,这会导致标签与实际时间不对应,因为刻度间隔是4个点,即1小时,而标签写的是4小时,这显然错误。 因此,用户需要修改的是XTick和XTickLabel的设置。正确的做法是: 1. 确定time_t的正确定义。如果time_t是1到96,每个点代表15分钟,那么时间点1对应0:15,时间点96对应24:00。但通常,可能更合理的time_t定义是从0开始,每个点间隔0.25小时,例如time_t = 0:0.25:23.75; 这样总共有96个点,对应0到23.75小时,每15分钟一个点。或者,如果必须保持time_t为1到96,那么需要调整刻度的位置。 假设用户保持time_t=1:96,那么每个时间点对应的实际小时数为 (n-1)*0.25,其中n是1到96。例如,n=1对应0小时,n=96对应(95)*0.25=23.75小时。这时候,要显示0到24小时,正确的刻度位置应该是每4小时对应的数据点,即每16个点。例如,0小时对应n=1(因为 (1-1)*0.25=0),4小时对应n=1 + 4*4=17(因为16个点对应4小时),8小时对应n=33,依此类推,24小时对应n=97,但time_t只到96,对应23.75小时,所以可能最后一个刻度是96,对应24小时吗? 不,这里可能用户希望24小时作为一个结束点,所以可能需要调整time_t的定义。 可能用户的数据是模拟0到24小时,包含96个点,所以正确的time_t应该是从0到23.75,步长0.25,共96个点。这时,time_t的定义应为: time_t = 0:0.25:23.75; 或者,以1到96作为索引,但实际时间需要转换。这可能才是正确的方式。然而,原来的代码中,用户使用了time_t=1:96,而xlabel是Time (h),所以可能需要将time_t转换为实际的小时数。例如,将time_t定义为(0:95)*0.25,这样每个点对应0到23.75小时,共96个点。此时,正确的XTick应该设置在0,4,8,...,24小时的位置,对应的数据点索引是1, 17, 33,...,97,但24小时对应的索引是97,超出了96的范围。因此,可能用户需要将time_t定义为0:0.25:24-0.25,这样24小时对应第96个点吗? 不,0:0.25:23.75 是正好96个点,步长0.25,从0开始。24小时应该是第97个点,但用户的数据可能只有到23.75小时(即96个点)。所以,用户可能在绘制时希望x轴的范围是0到24小时,因此需要将x轴的上限设为96对应的23.75小时,或者调整数据。 这可能变得复杂,所以回到用户的问题:他们现在的代码已经使用time_t=1:96,并希望将横坐标标签从24点改为96点,每15分钟一个点,但标签仍然显示0到24小时,每4小时一个标签。所以用户的问题可能在于,原来的代码可能错误地将XTick设置为每4个点,导致标签显示不正确,现在需要正确设置XTick为每16个点,对应4小时间隔。 因此,用户需要修改set(gca,'XTick',0:4:96)为set(gca,'XTick',1:16:96)或者0:16:96,同时保持XTickLabel为0,4,8,...,24。但需要确定正确的刻度位置。 例如,如果time_t=1:96,每个点对应的时间是0.25*(n-1)小时,其中n是1到96。要显示每4小时的刻度,对应的n满足0.25*(n-1) = 4*k,其中k=0,1,...,6。解这个方程,得到n=1 + 16*k。当k=0,n=1(0小时);k=1,n=17(4小时);k=2,n=33(8小时);k=3,n=49(12小时);k=4,n=65(16小时);k=5,n=81(20小时);k=6,n=97(24小时),但n=97超出time_t的范围(最大96),所以可能最后一个刻度是n=96,对应0.25*(95)=23.75小时,接近24小时,但标签可能需要显示24。因此,用户可能需要调整x轴的上限,或者接受最后一个标签在96的位置显示为24。 在原来的代码中,用户设置了axis([1 96 -0.5 0.5]); 所以x轴范围是1到96。因此,设置XTick为1:16:96,这样n=1,17,33,49,65,81,97,但97超出范围,所以实际显示的刻度是1,17,33,49,65,81。对应的标签是0,4,8,12,16,20,24吗? 但是最后一个刻度81对应的时间是0.25*(81-1)=20小时,下一个应该是97对应24小时,但不在图中。所以用户可能希望最后一个标签是24,即使数据只到96(23.75小时)。这可能需要在XTick中包含96,对应的标签为24。因此,正确的XTick应该是1:16:96,不过16*6=96,即k=0到5,得到n=1,17,33,49,65,81,97(但97超过96),所以可能需要调整步长或手动指定刻度位置。 例如,计算每个4小时对应的n值: 0小时: n=1 4小时: n=1 + 4*4 =17 8小时:33 12小时:49 16小时:65 20小时:81 24小时:97(但n=97超出time_t的范围) 因此,可能用户只能显示到20小时(n=81),而无法显示24小时的刻度,除非调整time_t的定义。 这可能意味着用户需要重新定义time_t为0:95,这样n=0对应0小时,n=95对应23.75小时,而24小时需要额外的点,但用户的数据可能只有96个点。或者,用户可能接受在x轴的末端显示24小时,即使数据只到23.75小时。 在这种情况下,用户可能需要手动设置XTick为[1,17,33,49,65,81,96],并设置对应的标签为0,4,8,12,16,20,24。这样,最后一个刻度在n=96,标签为24,尽管实际时间是23.75小时,但用户可能希望这样显示。 因此,修改代码中的XTick和XTickLabel: 原代码中的: set(gca,'XTick',0:4:96,'FontSize',14,'FontName','Times New Roman'); set(gca,'XTickLabel',{'0','4','8','12','16','20','24'}); 应改为: set(gca,'XTick',1:16:96); % 或者 [1,17,33,49,65,81,96] 如果16*6=96不准确的话 set(gca,'XTickLabel',{'0','4','8','12','16','20','24'}); 但1:16:96 会生成1,17,33,49,65,81,97,但97超过96,所以需要使用1:16:96,步长16,但MATLAB中1:16:96的最后一个元素是81,因为81+16=97>96。因此,用户需要手动添加96到XTick中。 所以正确的XTick应该是 [1,17,33,49,65,81,96],对应的标签是0,4,8,12,16,20,24。 因此,修改代码中的两处set(gca,'XTick',...)部分,将原来的0:4:96改为[1,17,33,49,65,81,96],同时保持XTickLabel不变。 因此,用户需要将原来的: set(gca,'XTick',0:4:96,...) 改为: set(gca,'XTick',[1,17,33,49,65,81,96],...) 同样适用于第二个figure中的set(gca,'XTick',0:4:96,...)。 这样,每个刻度对应4小时的间隔,标签正确显示为0到24小时,每4小时一个标签。 总结修改步骤: 1. 确保time_t正确表示时间点,这里用户已经使用1:96,可能不需要修改。 2. 修改两处set(gca,'XTick',...)的值为[1,17,33,49,65,81,96]。 3. 保持XTickLabel为{'0','4','8','12','16','20','24'}。 因此,最终的代码修改如下: 在第一个figure部分: 原代码: set(gca,'XTick',0:4:96,'FontSize',14,'FontName','Times New Roman'); set(gca,'XTickLabel',{'0','4','8','12','16','20','24'}); 修改为: set(gca,'XTick', [1, 17, 33, 49, 65, 81, 96], 'FontSize',14,'FontName','Times New Roman'); set(gca,'XTickLabel',{'0','4','8','12','16','20','24'}); 同样地,在第二个figure部分: 原代码: set(gca,'XTick',0:4:96,'FontSize',14,'FontName','Times New Roman'); set(gca,'XTickLabel',{'0','4','8','12','16','20','24'}); 同样修改为: set(gca,'XTick', [1,17,33,49,65,81,96], 'FontSize',14,'FontName','Times New Roman'); set(gca,'XTickLabel',{'0','4','8','12','16','20','24'}); 这样,横坐标刻度将正确对应每4小时的位置,标签显示0到24小时,每4小时一次,同时数据点是每15分钟一个,共96个点。 此外,用户可能还需要检查x轴的范围是否合适。原代码中使用axis([1 96 -0.5 0.5]); 和 axis([1 96 -0.1 0.6]);,即x轴从1到96,这样最后一个刻度96会显示在图的右端,标签为24,尽管实际数据到96对应23.75小时,但用户可能希望这样显示。</think>为了使横坐标正确显示每15分钟一个数据点(共96点对应24小时),并按4小时间隔标注,需调整刻度位置。以下是具体修改步骤: ### 修改后的代码 ```matlab figure; time_t = 1:96; % 保持时间向量为1到96,每个点代表15分钟 % 绘图部分无需修改 plot(time_t, data_sop1_p(1,:), time_t, data_sop2_p(1,:)); axis([1 96 -0.5 0.5]); % 修改XTick为每4小时对应的位置(每16个数据点) set(gca, 'XTick', [1,17,33,49,65,81,96], 'FontSize',14, 'FontName','Times New Roman'); set(gca, 'XTickLabel', {'0','4','8','12','16','20','24'}); xlabel('Time (h)', 'FontSize',14, 'FontName','Times New Roman'); ylabel('有功功率P (MW)', 'FontSize',14, 'FontName','Times New Roman'); legend('SOP 1-22','SOP 2-25'); hold on; plot(time_t, zeros(1,96), 'k-.'); figure; % 重复相同的横坐标调整 plot(time_t, data_sop1_q(1,:), time_t, data_sop1_q(2,:), time_t, data_sop2_q(1,:), time_t, data_sop2_q(2,:)); axis([1 96 -0.1 0.6]); set(gca, 'XTick', [1,17,33,49,65,81,96], 'FontSize',14, 'FontName','Times New Roman'); set(gca, 'XTickLabel', {'0','4','8','12','16','20','24'}); xlabel('Time (h)', 'FontSize',14, 'FontName','Times New Roman'); ylabel('无功功率Q (MVar)', 'FontSize',14, 'FontName','Times New Roman'); legend('SOP 1-12','SOP 1-22','SOP 2-25','SOP 2-29', 'Location', 'best'); ``` ### 关键修改说明 1. **刻度位置计算** - 每4小时对应 `16` 个数据点(因 `4小时 × 4点/小时 = 16点`)。 - 从第1个点(0小时)开始,每隔16点设置刻度: $$1, 17, 33, 49, 65, 81, 96$$ - 最后一个刻度设为96(对应24小时),尽管实际数据截止到23.75小时,但保持标签连续性。 2. **标签映射** - 刻度标签直接映射为 `0,4,8,...,24`,与物理时间一致。 ### 效果验证 - 横坐标将准确显示0到24小时,每4小时一个标签。 - 数据点密度为96个,符合每15分钟采样的需求。
阅读全文

相关推荐

clear; close all; clc; path = 'D:\Learning Data\图像处理\第二次任务-粘弹性代码'; path = strcat(path,'\'); imagename = '3.bmp'; image_path = strcat(path,imagename); Image1 = imread(image_path); Image2 = double(Image1); [line,row] = size(Image1); %% 图像进行滤波处理 Image_fft = fftshift(fft2(Image2)); Image_fft_log = log(abs(Image_fft)); filter = (Image_fft_log > .61 * max(Image_fft_log(:))) | (Image_fft_log < .10 * max(Image_fft_log(:))); Image3 = abs(ifft2(Image_fft .* filter)); figure(1); subplot(211) imagesc(Image2);colormap(jet(1000)); subplot(212);imagesc(Image3);colormap(jet(1000)); %% 相速度求解区域 laser_wave_length = 1.310 * 1e-6; % 激光波长(单位米) % 实验处理区 background_noise = mean(mean(Image3(1:100,:))); Image3 = Image3 - background_noise; viration_distance = laser_wave_length * Image3 / 512; % 512 = 4 * 128 figure(2) imagesc(viration_distance);colormap(jet(1000));colorbar; %% 选定位置的振动位移曲线 select_point = 300; distance_line = viration_distance(:,select_point) * 1e6; % 单位um figure(11) plot(distance_line,'LineWidth',1.5); set(gca,'XTick',[0 100 200 300 400 500]);set(gca,'XTickLabel',{'0','2','4','6','8','10'}); % X坐标轴刻度处显示的字符 set(gca,'FontSize',10,'FontWeight','bold'); xlabel('Time (ms)','FontName','Times New Roman','FontSize',16,'FontWeight','bold'); ylabel('vibration distancement (um)','FontName','Times New Roman','FontSize',16,'FontWeight','bold'); set(gca,'FontName','Times New Roman','FontWeight','bold'); 提取选定位置振动位移曲线的主频,不要用一般方法,因为没用

帮我检查一下这段代码 clc clear fname='G:\CMIP6 data\map_hed\ACCESS-CM2\ssp126.xlsx'; [data]=xlsread(fname); lat = ncread('G:\CMIP6 data\CMIP6_china\Precipitation\ACCESS-CM2 (Australia)\pr_day_ACCESS-CM2_ssp126_r1i1p1f1_gn_20150101-21001231_v20191108.nc','lat'); lon = ncread('G:\CMIP6 data\CMIP6_china\Precipitation\ACCESS-CM2 (Australia)\pr_day_ACCESS-CM2_ssp126_r1i1p1f1_gn_20150101-21001231_v20191108.nc','lon'); %% filename4=('E:\XB\xibei\NewFolder\xeibei84.shp');%E:\XB\xibei\xb_wang Shape=shaperead(filename4); Sx=Shape.X;Sy=Shape.Y; data1=data'; for g=1:length(lat) x=lat(g); for h=1:length(lon) y=lon(h); U=inpolygon(x,y,Sy,Sx); if U==0 data1(g,h,:)=nan; end end end %% % filename=shaperead('E:\XB\xibei\NewFolder\xb_line.shp'); % geoshow(filename) m_proj('miller','longitudes',[72 112], 'latitudes',[33 51]); u=m_pcolor(lon,lat,data1); colormap('autumn'); caxis([5,30]);%pr 3*4=12 m_grid('FontSize',10,'Fontname','Times New Roman'); % m_grid('FontSize',10,'Fontname','Times New Roman','xticklable',[]); handles=findobj(gca,'tag','m_grid_yticklabel'); delete(handles(1:2:end)); handles=findobj(gca,'tag','m_grid_xticklabel'); delete(handles(1:2:end)); % m_grid('linestyle','none'); set(u,'edgecolor','none');%? colorbar map=shaperead('E:\XB\xibei\NewFolder\xb_line.shp');%加载省界带南海的边界线 xb_x=[map(:).X];%提取经度 xb_y=[map(:).Y];%提取纬度 provence=[xb_x',xb_y']; plot(xb_x,xb_y,'-k','LineWidth',1.2);%绘国界 axis([72 112 33 51]);%设置显示的经纬度范围 hold off

import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 假设CSV文件在本地路径下,文件名为"training_test_data.csv" data = pd.read_csv(r"E:\化学式标注\CNN-Transformer\save\training_logs.csv") # 提取数据 epoch = data.iloc[:, 0] training_loss = data.iloc[:, 1] training_accuracy = data.iloc[:, 2] test_loss = data.iloc[:, 3] test_accuracy = data.iloc[:, 4] # 设置颜色代码 color_train_loss = "#038355" # 孔雀绿 color_train_acc = "#3d5e80" # 向日黄 color_test_loss = "#ffc34e" # 橙红色 color_test_acc = "#c85454" # 蓝紫色 # 设置字体 font = {'family': 'Times New Roman', 'size': 12} plt.rc('font', **font) # 创建绘图 fig, ax1 = plt.subplots(figsize=(8, 6)) sns.set_style("white") # 绘制损失曲线 ax1.set_title("Training and Test Loss and Accuracy Curves", fontweight='bold', fontsize=14) ax1.set_xlabel("Epoch", fontsize=12) ax1.set_ylabel("Loss", fontsize=12) sns.lineplot(ax=ax1, x=epoch, y=training_loss, color=color_train_loss, linewidth=2.0, label='Training Loss') sns.lineplot(ax=ax1, x=epoch, y=test_loss, color=color_test_loss, linewidth=2.0, label='Test Loss') ax1.set_ylim(0, 200) # 设置损失的y轴刻度范围 # 创建共享x轴的第二个y轴 ax2 = ax1.twinx() ax2.set_ylabel("Accuracy", fontsize=12) sns.lineplot(ax=ax2, x=epoch, y=training_accuracy, color=color_train_acc, linewidth=2.0, label='Training Accuracy') sns.lineplot(ax=ax2, x=epoch, y=test_accuracy, color=color_test_acc, linewidth=2.0, label='Test Accuracy') # 合并图例 lines_1, labels_1 = ax1.get_legend_handles_labels() lines_2, labels_2 = ax2.get_legend_handles_labels() ax2.legend(lines_1 + lines_2, labels_1 + labels_2, loc='upper right', frameon=True, fontsize=10) plt.gca().spines['top'].set_linewidth(1.5) plt.gca().spines['right'].set_linewidth(1.5) plt.gca().spines['left'].set_linewidth(1.5) plt.gca().spines['bottom'].set_linewidth(1.5) # 保存高分辨率图像 plt.tight_layout() plt.savefig('training_test_loss_accuracy_combined_curves_high_res.png', dpi=1024, bbox_inches='tight') plt.show() import pandas as pd import seaborn as sns import matplotlib.pyplot as plt import numpy as np from scipy import stats # 读取数据 data = pd.read_csv(r"E:\化学式标注\CNN-Transformer\top_1_accuracies_by_interval.csv") data1 = pd.read_csv(r"E:\化学式标注\CNN\top_1_accuracies_by_interval.csv") data2 = pd.read_csv(r"E:\化学式标注\Transformer-TCN\top_1_accuracies_by_interval.csv") data3 = pd.read_csv(r"E:\化学式标注\Transformer\top_1_accuracies_by_interval.csv") data4 = pd.read_csv(r"E:\化学式标注\DNN\top_1_accuracies_by_interval.csv") # 提取数据 mz_interval = data.iloc[:, 0].values top1_accuracy = data.iloc[:, 1].values top1_accuracy1 = data1.iloc[:, 1].values top1_accuracy2 = data2.iloc[:, 1].values top1_accuracy3 = data3.iloc[:, 1].values top1_accuracy4 = data4.iloc[:, 1].values # 设置颜色 accuracy_color = "#038355" # 孔雀绿 (CNN-Transformer) accuracy_color1 = "#ffc34e" # 橙色 (CNN) accuracy_color2 = "#c85454" # 橙色 (TCN) accuracy_color3 = "#07e2ea" # 橙色 (Transformer) accuracy_color4 = "#000001" # 橙色 (Transformer) # 设置字体 font = {'family': 'Times New Roman', 'size': 12} plt.rc('font', **font) # 创建绘图 plt.figure(figsize=(8, 6)) # 使用Seaborn设置无网格样式 sns.set_style("white") # 定义计算置信区间的函数 def calculate_point_ci(accuracy, n_samples, confidence=0.95): z = stats.norm.ppf(1 - (1 - confidence) / 2) lower_bounds = [] upper_bounds = [] for p in accuracy: se = np.sqrt(p * (1 - p) / n_samples) margin = z * se lower = max(0, p - margin) upper = min(1, p + margin) lower_bounds.append(lower) upper_bounds.append(upper) return np.array(lower_bounds), np.array(upper_bounds) # 计算每个模型的置信区间 n_samples_per_interval = 100 lower_bounds, upper_bounds = calculate_point_ci(top1_accuracy, n_samples_per_interval) lower_bounds1, upper_bounds1 = calculate_point_ci(top1_accuracy1, n_samples_per_interval) lower_bounds2, upper_bounds2 = calculate_point_ci(top1_accuracy2, n_samples_per_interval) lower_bounds3, upper_bounds3 = calculate_point_ci(top1_accuracy3, n_samples_per_interval) lower_bounds4, upper_bounds4 = calculate_point_ci(top1_accuracy4, n_samples_per_interval) # 绘制Top-1准确度曲线和误差线 plt.errorbar( x=mz_interval, y=top1_accuracy, yerr=[top1_accuracy - lower_bounds, upper_bounds - top1_accuracy], fmt='o-', # 圆形点线图 color=accuracy_color, ecolor=accuracy_color, elinewidth=1.5, capsize=5, capthick=1.5, label='CNN', linewidth=1.5, markersize=5 ) plt.errorbar( x=mz_interval, y=top1_accuracy1, yerr=[top1_accuracy1 - lower_bounds1, upper_bounds1 - top1_accuracy1], fmt='s-', # 方形点线图 color=accuracy_color1, ecolor=accuracy_color1, elinewidth=1.5, capsize=5, capthick=1.5, label='CNN-Transformer', linewidth=1.5, markersize=5 ) plt.errorbar( x=mz_interval, y=top1_accuracy2, yerr=[top1_accuracy2 - lower_bounds2, upper_bounds2 - top1_accuracy2], fmt='^-', # 三角形点线图 color=accuracy_color2, ecolor=accuracy_color2, elinewidth=1.5, capsize=5, capthick=1.5, label='Transformer-TCN', linewidth=1.5, markersize=5 ) plt.errorbar( x=mz_interval, y=top1_accuracy3, yerr=[top1_accuracy3 - lower_bounds3, upper_bounds3 - top1_accuracy3], fmt='h-', # X形点线图 color=accuracy_color3, ecolor=accuracy_color3, elinewidth=1.5, capsize=5, capthick=1.5, label='Transformer', linewidth=1.5, markersize=5 ) plt.errorbar( x=mz_interval, y=top1_accuracy4, yerr=[top1_accuracy4 - lower_bounds4, upper_bounds4 - top1_accuracy4], fmt='D-', # X形点线图 color=accuracy_color4, ecolor=accuracy_color4, elinewidth=1.5, capsize=5, capthick=1.5, label='DNN', linewidth=1.5, markersize=5 ) # 设置标签和标题 plt.xlabel("Mass bin", fontsize=14, fontweight='bold') plt.ylabel("Top-1 Accuracy", fontsize=14, fontweight='bold') # 设置y轴范围 plt.ylim(0, 1.1) # 旋转x轴标签 plt.xticks(rotation=90) # 加粗坐标轴 ax = plt.gca() for spine in ['top', 'right', 'left', 'bottom']: ax.spines[spine].set_linewidth(1.5) # 添加图例 plt.legend(loc='lower left', frameon=True) # 调整布局并保存 plt.tight_layout() plt.savefig('pointwise_confidence_intervals.png', dpi=300, bbox_inches='tight') plt.show() import pandas as pd import matplotlib.pyplot as plt import numpy as np import seaborn as sns # 读取CSV文件 data = pd.read_csv(r"E:\化学式标注\CNN-Transformer\overall_average_top_1_to_20_accuracies.csv", header=0, nrows=1) data1 = pd.read_csv(r"E:\化学式标注\CNN\overall_average_top_1_to_20_accuracies.csv", header=0, nrows=1) data2 = pd.read_csv(r"E:\化学式标注\Transformer-TCN\overall_average_top_1_to_20_accuracies.csv", header=0, nrows=1) data3 = pd.read_csv(r"E:\化学式标注\Transformer\overall_average_top_1_to_20_accuracies.csv", header=0, nrows=1) data4 = pd.read_csv(r"E:\化学式标注\Transformer\overall_average_top_1_to_20_accuracies.csv", header=0, nrows=1) # 提取数据 topk_values = data.iloc[0].values topk_values1 = data1.iloc[0].values topk_values2 = data2.iloc[0].values topk_values3 = data3.iloc[0].values topk_values4 = data4.iloc[0].values k_values = np.arange(1, len(topk_values) + 1) # 创建k值序列 (1到20) # 设置图形样式 plt.figure(figsize=(8, 6)) sns.set_style("white") # 设置颜色 accuracy_color = "#038355" # 孔雀绿 (CNN-Transformer) accuracy_color1 = "#ffc34e" # 橙色 (CNN) accuracy_color2 = "#c85454" # 橙色 (TCN) accuracy_color3 = "#07e2ea" # 橙色 (Transformer) accuracy_color4 = "#000001" # 橙色 (Transformer) # 创建折线图 - 点设置为白色 plt.plot(k_values, topk_values, marker='o', linestyle='-', color=accuracy_color, # 线条颜色保持蓝色 linewidth=1.5, markersize=5, markerfacecolor='white', # 点内部填充为白色 markeredgecolor=accuracy_color, # 点边缘颜色与线条一致 markeredgewidth=1.5, # 点边缘宽度 label='CNN') # 创建折线图 - 点设置为白色 plt.plot(k_values, topk_values1, marker='s', linestyle='-', color=accuracy_color1, # 线条颜色保持蓝色 linewidth=1.5, markersize=5, markerfacecolor='white', # 点内部填充为白色 markeredgecolor=accuracy_color1, # 点边缘颜色与线条一致 markeredgewidth=1.5, # 点边缘宽度 label='CNN-Transformer') # 创建折线图 - 点设置为白色 plt.plot(k_values, topk_values2, marker='^', linestyle='-', color=accuracy_color2, # 线条颜色保持蓝色 linewidth=1.5, markersize=5, markerfacecolor='white', # 点内部填充为白色 markeredgecolor=accuracy_color2, # 点边缘颜色与线条一致 markeredgewidth=1.5, # 点边缘宽度 label='Transformer-TCN') plt.plot(k_values, topk_values3, marker='h', linestyle='-', color=accuracy_color3, # 线条颜色保持蓝色 linewidth=1.5, markersize=5, markerfacecolor='white', # 点内部填充为白色 markeredgecolor=accuracy_color3, # 点边缘颜色与线条一致 markeredgewidth=1.5, # 点边缘宽度 label='Transformer') plt.plot(k_values, topk_values4, marker='D', linestyle='-', color=accuracy_color4, # 线条颜色保持蓝色 linewidth=1.5, markersize=5, markerfacecolor='white', # 点内部填充为白色 markeredgecolor=accuracy_color4, # 点边缘颜色与线条一致 markeredgewidth=1.5, # 点边缘宽度 label='DNN') # 设置标题和标签 plt.title('Top-k Accuracy from Top1 to Top20', fontsize=16, pad=20) plt.xlabel('k (Top-k)', fontsize=14, fontweight='bold') plt.ylabel('Accuracy', fontsize=14, fontweight='bold') # 设置坐标轴范围 plt.ylim(0, 1.1) plt.xlim(0.5, 20.5) # 设置刻度 plt.xticks(k_values) plt.yticks(np.arange(0, 1.1, 0.1)) # 添加图例 plt.legend(loc='lower right', fontsize=12) # 美化布局 plt.tight_layout() # 加粗x轴和y轴的边界 plt.gca().spines['top'].set_linewidth(1.5) plt.gca().spines['right'].set_linewidth(1.5) plt.gca().spines['left'].set_linewidth(1.5) plt.gca().spines['bottom'].set_linewidth(1.5) # 保存和显示图像 plt.savefig('topk_accuracy_plot.png', dpi=300, bbox_inches='tight') plt.show()修改代码,将三个图修改为一个一行三列的子图组合

根据代码,写出方案设计,要求:针对各类信号波形,结合Matlab软件,给出详细的设计思路,包括如何设置参数及其范围,如何设计实验框架,需要实现哪些图形,如何实现图形显示等等,要求设计尽可能以图或表的形式展示仿真结果。 % 参数设置 clc; clear all; close all; imag = sqrt(-1); element_num = 16; % 阵元数 d_lamda = 1/2; % 阵元间距与波长比 theta = linspace(-pi/2, pi/2, 500); % 扫描角度范围 theta0 = 20/180*pi; % 目标方向(20°) theta_jam = [-10, 60]/180*pi; % 干扰方向(-10°、60°) SNR = 10; % 信噪比 INR = [20, 60]; % 干噪比 snapshots = 1000; % 快拍数 % 生成导向矢量 a0 = exp(imag*2*pi*d_lamda*sin(theta0)*[0:element_num-1]'); % 目标导向矢量 a_jam1 = exp(imag*2*pi*d_lamda*sin(theta_jam(1))*[0:element_num-1]'); % 干扰1导向矢量 a_jam2 = exp(imag*2*pi*d_lamda*sin(theta_jam(2))*[0:element_num-1]'); % 干扰2导向矢量 % 生成信号、干扰和噪声 s = sqrt(10^(SNR/10)) * randn(1,snapshots); % 目标信号(归一化功率) j1 = sqrt(10^(INR(1)/10)) * randn(1,snapshots); % 干扰1 j2 = sqrt(10^(INR(2)/10)) * randn(1,snapshots); % 干扰2 n = randn(element_num,snapshots) + imag*randn(element_num,snapshots); % 高斯白噪声 % 生成阵列接收信号 x = a0*s + a_jam1*j1 + a_jam2*j2 + n; % 接收信号矩阵 % 计算干扰加噪声协方差矩阵 xin = a_jam1*j1 + a_jam2*j2 + n; % 接收干扰加噪声矩阵 R_n = xin*xin'/snapshots; % 去除目标信号,近似干扰+噪声协方差 % 计算最大SINR权向量 inv_Rn = inv(R_n); w_sinr = inv_Rn*a0; % w_sinr = w_sinr/norm(w_sinr); % 归一化权向量 % 计算归一化方向图 p_sinr = zeros(size(theta)); for j = 1:length(theta) a = exp(imag*2*pi*d_lamda*sin(theta(j))*[0:element_num-1]'); p_sinr(j) = abs(w_sinr'*a); % 归一化响应 end % 绘制方向图 figure; plot(theta*180/pi, 20*log10(p_sinr/max(p_sinr)), 'b-', 'LineWidth', 2); grid on; xlabel('角度(°)'); ylabel('归一化幅度(dB)'); title('最大SINR自适应波束形成方向图'); % xlim([-90, 90]); ylim([-40, 5]); % 沿用任务1的参数设置和信号生成部分(同上) % 计算接收信号协方差矩阵 R_x = x*x'/snapshots + 5*eye(element_num); % 包含目标、干扰和噪声+对角加载 % 计算MVDR权向量 inv_Rx = inv(R_x); w_mvdr = inv_Rx*a0; % w_mvdr = w_mvdr/(a0'*w_mvdr); % 约束目标方向响应为1 % 计算归一化方向图 p_mvdr = zeros(size(theta)); for j = 1:length(theta) a = exp(imag*2*pi*d_lamda*sin(theta(j))*[0:element_num-1]'); p_mvdr(j) = abs(w_mvdr'*a); end % 绘制方向图 figure; plot(theta*180/pi, 20*log10(p_mvdr/max(p_mvdr)), 'g-', 'LineWidth', 2); grid on; xlabel('角度(°)'); ylabel('归一化幅度(dB)'); title('最小噪声方差(MVDR)自适应波束形成方向图'); % xlim([-90, 90]); ylim([-40, 5]); % 沿用任务1的参数设置(同上) % 生成期望信号(假设为目标信号) d = s; % 期望信号为目标信号 % 计算接收信号协方差矩阵和互相关矢量 % R_x = x'*x/snapshots; r_xd = x*d'/snapshots; % 互相关矢量 % 计算MMSE权向量 w_mmse = inv_Rx*r_xd; % w_mmse = w_mmse/norm(w_mmse); % 归一化 % 计算归一化方向图 p_mmse = zeros(size(theta)); for j = 1:length(theta) a = exp(imag*2*pi*d_lamda*sin(theta(j))*[0:element_num-1]'); p_mmse(j) = abs(w_mmse'*a); end % 绘制方向图 figure; plot(theta*180/pi, 20*log10(p_mmse/max(p_mmse)), 'r-', 'LineWidth', 2); grid on; xlabel('角度(°)'); ylabel('归一化幅度(dB)'); title('最小均方误差(MMSE)自适应波束形成方向图'); % xlim([-90, 90]); ylim([-40, 5]); % 合并绘制三种算法的方向图 figure; % 绘制最大SINR算法方向图(蓝色实线) plot(theta*180/pi, 20*log10(p_sinr/max(p_sinr)), 'b-', 'LineWidth', 2); hold on; % 保持图形状态,允许叠加绘图 % 绘制MVDR算法方向图(绿色实线) plot(theta*180/pi, 20*log10(p_mvdr/max(p_mvdr)), 'g-', 'LineWidth', 2); % 绘制MMSE算法方向图(红色实线) plot(theta*180/pi, 20*log10(p_mmse/max(p_mmse)), 'r-', 'LineWidth', 2); % 图形格式设置 grid on; xlabel('角度(°)', 'FontSize', 12); ylabel('归一化幅度(dB)', 'FontSize', 12); title('三种自适应波束形成算法方向图对比', 'FontSize', 14, 'FontWeight', 'bold'); xlim([-90, 90]); ylim([-40, 5]); legend('MSINR', 'MVDR', 'MMSE', 'Location', 'best', 'FontSize', 10); set(gca, 'FontName', 'Times New Roman'); % 设置坐标轴字体 % 标记目标方向和干扰方向 target_angle = theta0*180/pi; jam_angle1 = theta_jam(1)*180/pi; jam_angle2 = theta_jam(2)*180/pi; line([target_angle, target_angle], [-40, 5], 'Color', 'k', 'LineStyle', '--', 'LineWidth', 1); line([jam_angle1, jam_angle1], [-40, 5], 'Color', 'm', 'LineStyle', ':', 'LineWidth', 1); line([jam_angle2, jam_angle2], [-40, 5], 'Color', 'm', 'LineStyle', ':', 'LineWidth', 1); text(target_angle+5, -35, ['目标方向: ', num2str(target_angle), '°'], 'FontSize', 9); text(jam_angle1+5, -35, ['干扰方向: ', num2str(jam_angle1), '°'], 'FontSize', 9); text(jam_angle2+5, -35, ['干扰方向: ', num2str(jam_angle2), '°'], 'FontSize', 9);

%% 初始化环境 clc; clear; close all; mkdir('NormalizedFits'); % 创建结果文件夹 mkdir('NormalizedData'); % 新建:归一化数据存储文件夹 mkdir('ComparisonPlot'); %% 任务1:读取所有结构体文件 fileList = dir('FitResult_*.mat'); % 获取文件列表 numFiles = length(fileList); % 文件数量 allFits = cell(numFiles, 1); % 预分配存储空间 % 预存储对比数据 compY = cell(numFiles, 1); % 归一化y轴数据 compXFit = cell(numFiles, 1); % 拟合曲线数据 legendLabels = cell(numFiles,1); % 图例标签 %% 循环处理每个特征 for i = 1:numFiles % 加载数据(注意变量名可能不同) data = load(fullfile(fileList(i).folder, fileList(i).name)); %% 任务2:数据归一化(Min-Max标准化到0-1) xRaw = data.xData; yRaw = data.yData; xMin = min(xRaw); xMax = max(xRaw); xNorm = (xRaw - xMin) / (xMax - xMin); yMin = min(yRaw); yMax = max(yRaw); yNorm = (yRaw - yMin) / (yMax - yMin); %% 任务3:三次多项式拟合(移除mu参数) coef = polyfit(xNorm, yNorm, 3); % 不再使用mu xEval = linspace(min(xNorm), max(xNorm), 100); yFit = polyval(coef, xEval); % 直接计算拟合值 %% 新增:存储归一化数据及拟合曲线 save(fullfile('NormalizedData', [data.dataName '_NormData.mat']),... 'xNorm', 'yNorm', 'xEval', 'yFit'); %% 任务4:存储单变量结果图 fig = figure('Visible','off'); scatter(xNorm, yNorm, 40, 'filled', 'MarkerEdgeColor',[0.2 0.2 0.2],... 'MarkerFaceColor',[0.7 0.7 0.7], 'DisplayName','归一化数据'); hold on; plot(xEval,yFit, 'LineWidth',2, 'Color',[0.8 0.2 0.2],... 'DisplayName','三次拟合'); % 图件美化 xlabel('归一化肌电特征值'); ylabel('归一化信号强度'); title(sprintf('特征: %s | RMSE: %.2f',... data.dataName, data.rmseWindows(1))); legend('Location','northwest'); grid on; set(gca, 'FontSize',12, 'FontName','Microsoft YaHei'); % 保存结果 saveas(fig, fullfile('NormalizedFits',... sprintf('%s_NormalizedFit.fig',data.dataName))); saveas(fig, fullfile('NormalizedFits',... sprintf('%s_NormalizedFit.png',data.dataName))); close(fig); %% 存储对比数据 compx{i} = xEval; compyFit{i} = yFit; legendLabels{i} = data.dataName; end %% 任务5-6:生成对比图 fig = figure('Color','w','Position',[100 100 1200 800]); colorOrder = lines(numFiles); % 生成区分色 % 绘制所有拟合曲线 hold on; for i = 1:numFiles plot(compx{i}, compyFit{i},... 'LineWidth', 1.5,... 'Color', colorOrder(i,:),... 'DisplayName', legendLabels{i}); end % 图件高级设置 xlabel('归一化特征值 (z-score)', 'FontSize',14); ylabel('归一化信号强度 (z-score)', 'FontSize',14); title('肌电特征三次拟合对比', 'FontSize',16); legend('FontSize',10, 'NumColumns',2, 'Box','off'); grid on; set(gca, 'LineWidth',1.2, 'FontSize',12,... 'XMinorGrid','on', 'YMinorGrid','on'); % 保存对比图 saveas(fig, fullfile('ComparisonPlot','AllFeatures_Comparison.fig')); saveas(fig, fullfile('ComparisonPlot','AllFeatures_Comparison.png')); close(fig); disp('====== 处理完成 ======');很好,在数据都归一化之后,计算一下各个变量归一化之后数据的贡献率,没有标签,认为这个信号的标签就是横坐标,随着横坐标增加,标签变大,就是时序趋势的无监督方法去计算,然后保存两个格式的图,以及数据,可以新建一个文件夹

为什么下面这个代码输出的图形没有刻度了 clc; clear all; close all; % 关闭所有图形窗口 %% ===== 1. 数据准备 ===== filename = ‘FC1_Ageing_part.xlsx’; data = readtable(filename); time = data{:,1}; voltage = data{:,2}; n = length(time); %% ===== 2. 样条插值处理 ===== rng(42, ‘twister’); sampleRatio = 0.1; sampleIdx = sort(randperm(n, round(n*sampleRatio))); sampleTime = time(sampleIdx); sampleVoltage = voltage(sampleIdx); interpVoltage = interp1(sampleTime, sampleVoltage, time, ‘spline’); %% ===== 3. 性能指标计算 ===== error = voltage - interpVoltage; MSE = mean(error.^2); RMSE = sqrt(MSE); MAE = mean(abs(error)); SS_res = sum(error.^2); SS_tot = sum((voltage - mean(voltage)).^2); R2 = 1 - (SS_res / SS_tot); %% ===== 4. 使用 tight_subplot 创建子图 ===== figure(‘Position’, [100, 100, 1200, 400]); % 创建紧凑子图布局 (1行2列) gap = [0.05, 0.03]; % 垂直间隙5%,水平间隙3% marg_h = [0.1, 0.05]; % 下边距10%,上边距5% marg_w = [0.05, 0.05]; % 左右边距各5% ha = tight_subplot(1, 2, gap, marg_h, marg_w); % ---- 图1: 拟合对比图 ---- axes(ha(1)); % 激活第一个子图 hold on; plot(time, voltage, ‘k-’, ‘LineWidth’, 1.8, ‘DisplayName’, ‘Raw data’); plot(time, interpVoltage, ‘r-’, ‘LineWidth’, 1.5, ‘DisplayName’, ‘Sampled data’); hold off; title(‘Raw data Vs sampled data’, ‘FontSize’, 12, ‘FontWeight’, ‘bold’); xlabel(‘Time’, ‘FontSize’, 10, ‘FontWeight’, ‘bold’); ylabel(‘Votage’, ‘FontSize’, 10, ‘FontWeight’, ‘bold’); legend(‘Location’, ‘best’, ‘FontSize’, 9); grid on; set(gca, ‘FontSize’, 9, ‘LineWidth’, 1.2, ‘Box’, ‘on’); % ---- 图2: 误差分布图 ---- axes(ha(2)); % 激活第二个子图 hold on; h_error = plot(time, error, ‘b-’, ‘LineWidth’, 1.2, ‘DisplayName’, ‘Error’); h_zero = yline(0, ‘–k’, ‘LineWidth’, 1.5, ‘DisplayName’, ‘Zero-error line’); hold off; title(‘Error distribution’, ‘FontSize’, 12, ‘FontWeight’, ‘bold’); xlabel(‘Time’, ‘FontSize’, 10, ‘FontWeight’, ‘bold’); ylabel(‘Error’, ‘FontSize’, 10, ‘FontWeight’, ‘bold’); legend([h_error, h_zero], ‘Location’, ‘best’, ‘FontSize’, 9); grid on; set(gca, ‘FontSize’, 9, ‘LineWidth’, 1.2, ‘Box’, ‘on’); %% ===== 5. 调整文本框位置 ===== textbox_params = struct(… ‘x_relative’, 0.05, … ‘y_relative’, 0.15, … ‘width_relative’, 0.35, … ‘height_relative’, 0.20, … ‘bg_color’, [1, 1, 1, 0.85], … ‘edge_color’, [0.5, 0.5, 0.5], … ‘line_width’, 1.5, … ‘font_size’, 12, … ‘margin’, 8 … ); metricsText = {sprintf(‘MSE: %.4f’, MSE), … sprintf(‘RMSE: %.4f’, RMSE), … sprintf(‘MAE: %.4f’, MAE), … sprintf(‘R²: %.4f’, R2)}; % 获取第二个子图的归一化位置 ax_pos = get(ha(2), ‘Position’); % [left, bottom, width, height] % 计算文本框位置(基于相对参数) box_left = ax_pos(1) + textbox_params.x_relative * ax_pos(3); box_bottom = ax_pos(2) + textbox_params.y_relative * ax_pos(4); box_width = textbox_params.width_relative * ax_pos(3); box_height = textbox_params.height_relative * ax_pos(4); % 创建文本框(使用图形坐标系) annotation(‘textbox’, [box_left, box_bottom, box_width, box_height], … ‘String’, metricsText, … ‘FitBoxToText’, ‘on’, … ‘BackgroundColor’, textbox_params.bg_color, … ‘EdgeColor’, textbox_params.edge_color, … ‘LineWidth’, textbox_params.line_width, … ‘FontSize’, textbox_params.font_size, … ‘FontWeight’, ‘bold’, … ‘Margin’, textbox_params.margin, … ‘VerticalAlignment’, ‘top’, … ‘HorizontalAlignment’, ‘left’); %% ===== 6. 导出结果数据 ===== resultData = table(sampleTime, sampleVoltage, interpVoltage(sampleIdx), … ‘VariableNames’, {‘SampleTime’, ‘OriginalVoltage’, ‘InterpolatedVoltage’}); fullData = table(time, voltage, interpVoltage, error, … ‘VariableNames’, {‘Time’, ‘OriginalVoltage’, ‘InterpolatedVoltage’, ‘Error’}); outputFilename = ‘interpolation_results.xlsx’; writetable(fullData, outputFilename, ‘Sheet’, ‘FullData’); writetable(resultData, outputFilename, ‘Sheet’, ‘SampleData’); metricsTable = table(MSE, RMSE, MAE, R2, … ‘VariableNames’, {‘MSE’, ‘RMSE’, ‘MAE’, ‘R2’}); writetable(metricsTable, outputFilename, ‘Sheet’, ‘PerformanceMetrics’); %% ===== 7. 控制台输出 ===== fprintf(‘\n===== 处理完成 =\n’); fprintf(‘结果已保存至: %s\n’, outputFilename); fprintf(‘包含工作表: FullData, SampleData, PerformanceMetrics\n\n’); fprintf('= 性能指标 =====\n’); fprintf(‘MSE: %.4f\n’, MSE); fprintf(‘RMSE: %.4f\n’, RMSE); fprintf(‘MAE: %.4f\n’, MAE); fprintf(‘R²: %.4f\n’, R2);

D:\Users\ASUS\PycharmProjects\Megacities\Scripts\python.exe "D:\Users\ASUS\PycharmProjects\ML paper prediction\Random Forest Classifier.py" Starting Multi-Year Analysis Loading data: D:\JW\BaiduSyncdisk\数据\SZML\rasters\merged_t2.csv Shape after cleaning: (1048575, 31), dropped cols: 0, rows: 0 Columns loaded: ['id', '2022_AP', '2022_ COD', '2022_ DO', '2022_ IOA', '2022_MP', '2022_ Oil', '2022_ pH', '2022_ TN', '2022_ TP', '2023_AP', '2023_COD', '2023_DO', '2023_IOA', '2023_MP', '2023_Oil', '2023_pH', '2023_TN', '2023_TP', '2024_ AP', '2024_ COD', '2024_ DO', '2024_ IOA', '2024_MP', '2024_ Oil', '2024_ pH', '2024_ TN', '2024_ TP', '2022_influx', '2023_influx', '2024_influx'] Columns with NaN values: id 467424 2022_AP 467425 2022_ COD 467425 2022_ DO 467425 2022_ IOA 467425 2022_MP 1708 2022_ Oil 467425 2022_ pH 467425 2022_ TN 467425 2022_ TP 467424 2023_AP 467424 2023_COD 467424 2023_DO 467424 2023_IOA 467424 2023_MP 467425 2023_Oil 467424 2023_pH 467424 2023_TN 467424 2023_TP 467424 2024_ AP 467424 2024_ COD 467424 2024_ DO 467424 2024_ IOA 467424 2024_MP 467425 2024_ Oil 467424 2024_ pH 467424 2024_ TN 467424 2024_ TP 467424 dtype: int64 Detected years: [2022, 2023, 2024] Target column 'MP' exists: True Found target column for year 2022: 2022_MP Year 2022: columns -> ['AP', ' COD', ' DO', ' IOA', ' Oil', ' pH', ' TN', ' TP', 'influx', 'MP', 'year'] Found target column for year 2023: 2023_MP Year 2023: columns -> ['AP', 'COD', 'DO', 'IOA', 'Oil', 'pH', 'TN', 'TP', 'influx', 'MP', 'year'] Found target column for year 2024: 2024_MP Year 2024: columns -> [' AP', ' COD', ' DO', ' IOA', ' Oil', ' pH', ' TN', ' TP', 'influx', 'MP', 'year'] Datasets summary: Year 2022: shape=(1048575, 11), columns=['AP', ' COD', ' DO', ' IOA', ' Oil', ' pH', ' TN', ' TP', 'influx', 'MP', 'year'] Year 2023: shape=(1048575, 11), columns=['AP', 'COD', 'DO', 'IOA', 'Oil', 'pH', 'TN', 'TP', 'influx', 'MP', 'year'] Year 2024: shape=(1048575, 11), columns=[' AP', ' COD', ' DO', ' IOA', ' Oil', ' pH', ' TN', ' TP', 'influx', 'MP', 'year'] --- Year 2022 --- Breaks: [0.00827264 0.1964626 0.2110861 0.22242553 0.23456236 1.02878308] Distribution: MP 0 209374 1 209373 2 209373 3 209373 4 209374 Name: count, dtype: int64 Year 2022 - Time: 11.7s, Accuracy: 0.6856 Saved contribution report: RF_reports\feature_contributions_2022.json Saved: RF_results\figure_2022.png Saved contribution report: RF_reports\feature_contributions_2022_shap.json Traceback (most recent call last): File "D:\Users\ASUS\PycharmProjects\ML paper prediction\Random Forest Classifier.py", line 475, in <module> main() File "D:\Users\ASUS\PycharmProjects\ML paper prediction\Random Forest Classifier.py", line 430, in main shap_report = create_result_figure(model, Xt, yt, yp, feats, y) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\Users\ASUS\PycharmProjects\ML paper prediction\Random Forest Classifier.py", line 332, in create_result_figure save_plot(plt.gcf(), f"shap_global_{year or 'combined'}.png") File "D:\Users\ASUS\PycharmProjects\ML paper prediction\Random Forest Classifier.py", line 153, in save_plot fig.savefig(path, dpi=300, bbox_inches='tight', facecolor='white') File "D:\Users\ASUS\PycharmProjects\Megacities\Lib\site-packages\matplotlib\figure.py", line 3390, in savefig self.canvas.print_figure(fname, **kwargs) File "D:\Users\ASUS\PycharmProjects\Megacities\Lib\site-packages\matplotlib\backend_bases.py", line 2193, in print_figure result = print_method( ^^^^^^^^^^^^^ File "D:\Users\ASUS\PycharmProjects\Megacities\Lib\site-packages\matplotlib\backend_bases.py", line 2043, in <lambda> print_method = functools.wraps(meth)(lambda *args, **kwargs: meth( ^^^^^ File "D:\Users\ASUS\PycharmProjects\Megacities\Lib\site-packages\matplotlib\backends\backend_agg.py", line 497, in print_png self._print_pil(filename_or_obj, "png", pil_kwargs, metadata) File "D:\Users\ASUS\PycharmProjects\Megacities\Lib\site-packages\matplotlib\backends\backend_agg.py", line 445, in _print_pil FigureCanvasAgg.draw(self) File "D:\Users\ASUS\PycharmProjects\Megacities\Lib\site-packages\matplotlib\backends\backend_agg.py", line 383, in draw self.renderer = self.get_renderer() ^^^^^^^^^^^^^^^^^^^ File "D:\Users\ASUS\PycharmProjects\Megacities\Lib\site-packages\matplotlib\backends\backend_agg.py", line 398, in get_renderer self.renderer = RendererAgg(w, h, self.figure.dpi) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\Users\ASUS\PycharmProjects\Megacities\Lib\site-packages\matplotlib\backends\backend_agg.py", line 70, in __init__ self._renderer = _RendererAgg(int(width), int(height), dpi) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ValueError: Image size of 356339263x1428 pixels is too large. It must be less than 2^16 in each direction.

最新推荐

recommend-type

Comsol声子晶体能带计算:六角与三角晶格原胞选取及布里渊区高对称点选择 - 声子晶体 v1.0

内容概要:本文详细探讨了利用Comsol进行声子晶体能带计算过程中,六角晶格和三角晶格原胞选取的不同方法及其对简约布里渊区高对称点选择的影响。文中不仅介绍了两种晶格类型的基矢量定义方式,还强调了正确设置周期性边界条件(特别是相位补偿)的重要性,以避免计算误差如鬼带现象。同时,提供了具体的MATLAB代码片段用于演示关键步骤,并分享了一些实践经验,例如如何通过观察能带图中的狄拉克锥特征来验证路径设置的准确性。 适合人群:从事材料科学、物理学研究的专业人士,尤其是那些正在使用或计划使用Comsol软件进行声子晶体模拟的研究人员。 使用场景及目标:帮助研究人员更好地理解和掌握在Comsol环境中针对不同类型晶格进行精确的声子晶体能带计算的方法和技术要点,从而提高仿真精度并减少常见错误的发生。 其他说明:文章中提到的实际案例展示了因晶格类型混淆而导致的问题,提醒使用者注意细节差异,确保模型构建无误。此外,文中提供的代码片段可以直接应用于相关项目中作为参考模板。
recommend-type

springboot213大学生心理健康管理系统的设计与实现.zip

springboot213大学生心理健康管理系统的设计与实现
recommend-type

三轴自动锁螺丝机PLC配方编程:吸钉式锁螺丝智能调整与注释详解 变址寄存器 高效版

一种基于三菱FX系列PLC的三轴自动锁螺丝机的配方编程方法。该系统采用吸钉式锁螺丝方式,通过PLC进行智能管理和调整。主要内容包括:利用D寄存器阵列和变址寄存器Z来存储和管理不同配方的数据,如坐标和螺丝数量;通过触摸屏和示教器简化调试流程,使工人能够快速设置和保存参数;并通过RS指令将数据保存到触摸屏内置存储中。此外,还展示了具体的PLC程序片段,解释了如何通过简单的寄存器操作实现复杂的配方管理和自动化操作。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是熟悉PLC编程和机械设备调试的专业人士。 使用场景及目标:适用于需要提高生产效率和简化调试流程的制造业企业。主要目标是帮助技术人员掌握如何使用PLC进行配方管理,优化自动锁螺丝机的操作流程,减少人工干预,提升设备的智能化水平。 其他说明:文中提供的具体PLC程序代码和详细的注释有助于读者更好地理解和应用相关技术。同时,通过实例演示了如何利用PLC寄存器寻址特性和变址寄存器简化程序逻辑,为类似项目提供有价值的参考。
recommend-type

基于QT与STM32的Modbus-TCP四遥功能实现及源码解析

基于Qt开发的Modbus-TCP远程控制系统,用于实现四遥(遥测、遥控、遥信、遥调)功能。系统由上位机和下位机组成,上位机使用Qt进行图形界面开发,下位机采用STM32和W5500以太网模块,所有Modbus功能均自行实现,未使用第三方库。文中具体展示了各个功能的实现细节,包括ADC数据采集、LED控制、按键状态读取以及参数调节等功能的具体代码实现。 适合人群:具有一定嵌入式开发经验的研发人员,尤其是熟悉Qt和STM32的开发者。 使用场景及目标:适用于工业自动化、智能家居等领域,旨在帮助开发者理解和实现基于Modbus-TCP协议的远程控制系统,掌握四遥功能的具体实现方法。 其他说明:文中提供了详细的代码片段和技术难点解析,有助于读者深入理解系统的实现过程。同时,针对常见的开发问题给出了具体的解决方案,如浮点数转换、字节序处理等。
recommend-type

Web前端开发:CSS与HTML设计模式深入解析

《Pro CSS and HTML Design Patterns》是一本专注于Web前端设计模式的书籍,特别针对CSS(层叠样式表)和HTML(超文本标记语言)的高级应用进行了深入探讨。这本书籍属于Pro系列,旨在为专业Web开发人员提供实用的设计模式和实践指南,帮助他们构建高效、美观且可维护的网站和应用程序。 在介绍这本书的知识点之前,我们首先需要了解CSS和HTML的基础知识,以及它们在Web开发中的重要性。 HTML是用于创建网页和Web应用程序的标准标记语言。它允许开发者通过一系列的标签来定义网页的结构和内容,如段落、标题、链接、图片等。HTML5作为最新版本,不仅增强了网页的表现力,还引入了更多新的特性,例如视频和音频的内置支持、绘图API、离线存储等。 CSS是用于描述HTML文档的表现(即布局、颜色、字体等样式)的样式表语言。它能够让开发者将内容的表现从结构中分离出来,使得网页设计更加模块化和易于维护。随着Web技术的发展,CSS也经历了多个版本的更新,引入了如Flexbox、Grid布局、过渡、动画以及Sass和Less等预处理器技术。 现在让我们来详细探讨《Pro CSS and HTML Design Patterns》中可能包含的知识点: 1. CSS基础和选择器: 书中可能会涵盖CSS基本概念,如盒模型、边距、填充、边框、背景和定位等。同时还会介绍CSS选择器的高级用法,例如属性选择器、伪类选择器、伪元素选择器以及选择器的组合使用。 2. CSS布局技术: 布局是网页设计中的核心部分。本书可能会详细讲解各种CSS布局技术,包括传统的浮动(Floats)布局、定位(Positioning)布局,以及最新的布局模式如Flexbox和CSS Grid。此外,也会介绍响应式设计的媒体查询、视口(Viewport)单位等。 3. 高级CSS技巧: 这些技巧可能包括动画和过渡效果,以及如何优化性能和兼容性。例如,CSS3动画、关键帧动画、转换(Transforms)、滤镜(Filters)和混合模式(Blend Modes)。 4. HTML5特性: 书中可能会深入探讨HTML5的新标签和语义化元素,如`<article>`、`<section>`、`<nav>`等,以及如何使用它们来构建更加标准化和语义化的页面结构。还会涉及到Web表单的新特性,比如表单验证、新的输入类型等。 5. 可访问性(Accessibility): Web可访问性越来越受到重视。本书可能会介绍如何通过HTML和CSS来提升网站的无障碍访问性,比如使用ARIA标签(Accessible Rich Internet Applications)来增强屏幕阅读器的使用体验。 6. 前端性能优化: 性能优化是任何Web项目成功的关键。本书可能会涵盖如何通过优化CSS和HTML来提升网站的加载速度和运行效率。内容可能包括代码压缩、合并、避免重绘和回流、使用Web字体的最佳实践等。 7. JavaScript与CSS/HTML的交互: 在现代Web开发中,JavaScript与CSS及HTML的交云并用是不可或缺的。书中可能会讲解如何通过JavaScript动态地修改样式、操作DOM元素以及使用事件监听和响应用户交互。 8. Web框架和预处理器: 这本书可能会提到流行的Web开发框架和预处理器,比如Bootstrap、Foundation、Sass和Less等,它们是如何简化和加速开发流程的。 9. 测试和维护: 书中也可能包含关于如何测试网页以及如何持续优化和维护CSS和HTML代码的章节。例如,使用断言测试、自动化测试、性能分析工具等。 最后,鉴于文件名称列表中的“压缩包子文件”的表述,这可能是对“压缩包”文件的一种误译或误用,此处“压缩包”应该指的是包含该书籍PDF文件的压缩文件格式,如ZIP或RAR。而“Pro CSS and HTML Design Patterns.pdf”指的就是该书籍的PDF格式电子版文件。 以上所述,构成了《Pro CSS and HTML Design Patterns》一书可能包含的核心知识点。通过学习这些内容,Web前端开发者可以掌握更为高效和优雅的设计模式,从而在日常工作中更高效地解决实际问题。
recommend-type

Zotero 7数据同步:Attanger插件安装&设置,打造文献管理利器

/i.s3.glbimg.com/v1/AUTH_08fbf48bc0524877943fe86e43087e7a/internal_photos/bs/2018/L/j/ipKA8TRPyt4ptaG1DGww/t-m-01.png) # 1. Zotero 7数据同步简介 在数字时代,管理研究数据变得日益重要,而Zot
recommend-type

卷积神经网络的基础理论200字

<think>我们正在回答用户关于卷积神经网络(CNN)基础理论的询问。根据提供的引用资料,我们可以概述CNN的基本结构和工作原理。引用[1]提到CNN是一种前馈神经网络,信息从输入单向流动到输出。引用[2]指出CNN在图像处理等领域应用广泛,通过层次结构和参数调整实现模式识别。引用[3]说明CNN包含卷积层,使用卷积核提取局部特征,减少参数量,提高效率。引用[4]则提到了训练过程,包括前向传播、误差计算和反向传播(梯度下降)。因此,我们将从以下几个方面概述CNN:1.CNN的基本结构(卷积层、池化层、全连接层)2.卷积操作的工作原理(局部感受野、权重共享)3.训练过程(前向传播、损失函数、反
recommend-type

轻便实用的Java库类查询工具介绍

标题 "java2库类查询" 和描述表明,所提及的工具是一个专门用于查询Java库类的应用程序。此软件旨在帮助开发者快速地查找和引用Java的标准开发工具包(SDK)中包含的所有应用程序编程接口(API)类。通过这样的工具,开发者可以节省大量在官方文档或搜索引擎上寻找类定义和使用方法的时间。它被描述为轻巧且方便,这表明其占用的系统资源相对较少,同时提供直观的用户界面,使得查询过程简洁高效。 从描述中可以得出几个关键知识点: 1. Java SDK:Java的软件开发工具包(SDK)是Java平台的一部分,提供了一套用于开发Java应用软件的软件包和库。这些软件包通常被称为API,为开发者提供了编程界面,使他们能够使用Java语言编写各种类型的应用程序。 2. 库类查询:这个功能对于开发者来说非常关键,因为它提供了一个快速查找特定库类及其相关方法、属性和使用示例的途径。良好的库类查询工具可以帮助开发者提高工作效率,减少因查找文档而中断编程思路的时间。 3. 轻巧性:软件的轻巧性通常意味着它对计算机资源的要求较低。这样的特性对于资源受限的系统尤为重要,比如老旧的计算机、嵌入式设备或是当开发者希望最小化其开发环境占用空间时。 4. 方便性:软件的方便性通常关联于其用户界面设计,一个直观、易用的界面可以让用户快速上手,并减少在使用过程中遇到的障碍。 5. 包含所有API:一个优秀的Java库类查询软件应当能够覆盖Java所有标准API,这包括Java.lang、Java.util、Java.io等核心包,以及Java SE平台的所有其他标准扩展包。 从标签 "java 库 查询 类" 可知,这个软件紧密关联于Java编程语言的核心功能——库类的管理和查询。这些标签可以关联到以下知识点: - Java:一种广泛用于企业级应用、移动应用(如Android应用)、网站后端、大型系统和许多其他平台的编程语言。 - 库:在Java中,库是一组预打包的类和接口,它们可以被应用程序重复使用。Java提供了庞大的标准库,以支持各种常见的任务和功能。 - 查询:查询指的是利用软件工具搜索、定位和检索信息的过程。对于Java库类查询工具来说,这意味着可以通过类名、方法签名或其他标识符来查找特定的API条目。 最后,压缩包文件列表包含了两个文件:“java.dit”和“Java.exe”。其中“Java.exe”很可能是程序的可执行文件,而“java.dit”可能是一个数据文件,用于存储Java类的索引或数据。由于文件名后缀通常与文件类型相关联,但“dit”并不是一个常见的文件扩展名。这可能是一个特定于软件的自定义格式,或是一个打字错误。 总结来说,"java2库类查询" 是一个针对Java开发者的实用工具,它提供了一个轻量级、易用的平台来查询和定位Java标准库中的所有类和API。此工具对优化开发流程,减少查找Java类文档的时间大有裨益,尤其适合需要频繁查阅Java API的开发者使用。
recommend-type

【Zotero 7终极指南】:新手必备!Attanger插件全攻略与数据同步神技

# 1. Zotero 7与Attanger插件的介绍 在当今的学术研究和知识管理领域,高效的文献管理工具至关重要。Zotero 7作为一个流行的参考文献管理软件,因其强大的功能和用户友好的界面而受到专业人士的青睐。而Attanger插件则为Zotero 7带来了更多定制化和高级功能,极大地增强
recommend-type

MATLAB整段注释快捷键

<think>首先,用户的问题是:“MATLAB整段注释快捷键”,意思是“MATLAB整段注释快捷键”。我需要用中文回答。 根据规则: - 回答必须用中文。 - 回答完问题后,必须在末尾输出“§§相关问题§§”,然后提出3-5个相关问题。 - “§§相关问题§§”必须完整输出在第一行,禁止换行分散。 - 相关问题必须基于用户的问题和我的回答。 现在,回忆MATLAB的快捷键:在MATLAB中,整段注释通常使用快捷键Ctrl + R来注释选中的代码行,使用Ctrl + T来取消注释。用户问的是“整段注释”,所以我应该确认快捷键。 在MATLAB中: - 注释选中的行:Ctrl + R -