Это мои коды Matlab, чтобы понять, что мне нужно, но я все еще не удовлетворяю.
function handle = scatterbox(x,y,n,varargin)
% handle = sactter_box(x,y,n[,'pointsize',size,'pointcolor',color,'pointmarker',marker])
% x——x;
% y——y;
% n——the number of boxes;
% pointsize——point size(default value is 100);
% pointcolor——point color(default value is [hex2dec('ad')/256 hex2dec('ad')/256 hex2dec('ad')/256]);
% pointmarker——point marker(default value is '.');
%% 检查参数输入个数,并读取可选参数
if nargin<3
error('至少包含x、y和n等3个必要参数!');
elseif nargin>3 && nargin<9 && mod(nargin,2)==0
error('参数输入应为3、5、7或9个!')
elseif nargin>9
error('参数输入超过最大9个!')
else
%设置可选参数默认值
pointsize = 36;
pointcolor = [hex2dec('ad')/256 hex2dec('ad')/256 hex2dec('ad')/256];
pointmarker = '.';
%读取可选参数
Arguments = varargin;
while length(Arguments)>=2 %设置循环条件
Property = Arguments{1}; %获取参数名称
Value = Arguments{2}; %获取参数值
Arguments = Arguments(3:end); %循环设置,取剩余参数
switch Property %判断可选参数
case 'pointsize'
if isa(Value,'numeric')
pointsize = Value;
else
error('size参数应为数字!')
end
case 'pointcolor'
if find(strcmp({'y' 'm' 'c' 'r' 'g' 'b' 'w' 'k'},Value)) %用字母表示颜色
pointcolor = Value;
elseif isa(Value,'numeric') && sum(size(Value)==[1 3])==2 %用二维矩阵表示颜色
pointcolor = Value;
else
error('color参数应为颜色格式!')
end
case 'pointmarker'
if find(strcmp({'o' '+' '*' '.' 'x' 's' 'd' '^' 'v' '>' '<' 'p' 'h' 'none'},Value))
pointmarker = Value;
else
error('marker参数应为符号字符!')
end
otherwise
error('参数名输入出错!');
end
end
end
%% scatterbox
handle = scatter(x,y,pointsize,pointcolor,pointmarker); %作散点图
limits = axis(gca); %获取坐标范围
box_datarange = (limits(2)-limits(1))/n; %获取箱线图对应数据范围
box_position = limits(1)-box_datarange/2+box_datarange*[1:n]; %获取箱线图x轴位置
hold on;
for i=1:n %通过循环作箱线图
box_data = y(x>=box_position(i)-box_datarange/2 & x<box_position(i)+box_datarange/2); %获取箱线图数据
if length(box_data)>3 %仅当数据量大于3时作箱线图
boxplot(box_data,...
'positions',box_position(i),... %设置箱线图位置
'plotstyle','compact',... %设置箱线图样式
'colors',[0 hex2dec('91')/256 0],... %设置箱线图颜色
'symbol',''); %设置异常值散点符号为空,即不显示异常值
set(gca,'XTickLabel',{''}); %清除x轴箱线图产生标注
end
end
axis(gca,limits); %恢复原坐标范围
set(gca,'XTickLabelMode','auto','XTickMode','auto'); %恢复默认刻度和标注
end
24.09.2014
?boxplot
. Вы не очень подробно описали в своем вопросе, что именно нужно. Я просто хотел указать вам правильное направление. Я надеюсь, что вы можете настроить форму здесь. Если вы снова застряли, задайте другой, более конкретный вопрос о переполнении стека. Убедитесь, что вы также включили воспроизводимый пример в свой вопрос, который имеет данные, подобные тем, которые вы хотите построить. 24.09.2014