如何画图中阴影部分的斜线?
请问,下图中阴影部分的斜线是怎么画出来的?图是用双对数(loglog)画的,想要添加像图中那样的“剖面线”!
大家出出主意吧
[ 本帖最后由 eight 于 2008-4-29 18:41 编辑 ] 导入origin软件,可以实现阴影绘图。
回复 2楼 的帖子
我想直接在Matlab里面画,不知道可以不? 我只会垂直线填充,给你个简单的例子x=0:0.05:6;
plot(x,cos(x),'k',x,1./cosh(x),'k',,[-1,1],'k')
hold on
xx=linspace(0,4.73,20);
plot(,,'k-') 用matlab把基本的图画好,再去Visio里画斜线。这样做可能会影响效果。呵呵 知道直线的方程和曲线的方程,如果可以求出它们的交点,我想可以用plot命令来画;但是fzero和fsolve好像只能求一个交点,从图中可以看出直线与曲线最多时有四个交点,请问这个怎么求? 昨天刚答辩完,今天把《汽车理论(第4版)》227页的一个图的程序贴上来,和大家分享一下(如果有侵权嫌疑的话,还麻烦版主或管理员删掉)。
之所以分享,个人觉得有以下两点:(1)用到了plotyy命令;(2)综合了一些标注的命令。
程序编的不好的地方还请大家指点。
其中,斜线问题在本程序中还没有得到解决,期待高手能够帮忙解决一下,谢谢啦!
clf
clc
clear
close
%设置图片背景为白色
fig=figure;
set(fig,'Color',);
%__________________________________________________________________________
global Gqn0 n0 u f_x
f0=1; %车身-车轮双质量系统车身部分固有频率,单位:Hz
varsigma=0.25; %车身-车轮双质量系统阻尼比
gamma=9; %车身-车轮双质量系统刚度比
mu=10; %车身-车轮双质量系统质量比
u=20; %车速,单位:m/s
Gqn0=64e-6;%路面不平度系数,单位:m3
n0=0.1; %参考空间频率,单位:m-1
detaf=0.002; %计算时频率步长,单位:Hz
N=18000; %频率点数
f_x_array=logspace(-1,2,35);
M=length(f_x_array);
f=0.1:detaf:(N*detaf-0.1);
%__________________________________________________________________________
subplot(2,1,1);
Gdqf=fun2;
loglog(,,'linewidth',1.5,'linestyle','-','color','b');
set(gca,'XLim',,'XTickLabel',{'0.1','1','10'},'XMinorTick','off','Ylim',,'YMinorTick','off');
XLabel({'激振频率 \itf \rm / Hz','a )'},'FontSize',10,'FontName','Times');
Ylabel('$$G_{\dot{q}}(f)/\rm (m^2\cdot s^{-1})$$','Interpreter','latex','FontSize',10);
text(1.895,0.00272,{'B 级路面','车速\it u\rm = 20 m / s'},'FontName','Times','FontSize',10,'HorizontalAlignment','center');
%__________________________________________________________________________
subplot(2,1,2);
Gdqf=fun2;
loglog(f,Gdqf);
hold on
Dddz2dq=fun7(f,f0,varsigma,gamma,mu);
Gddz2f=Dddz2dq.^2.*Gdqf;
=plotyy(f,Gddz2f,f,Dddz2dq.^2,@loglog,@loglog);
set(AX(1),'XLim',,'XTickLabel',{'0.1','1','10'},'XColor','k','XMinorTick','off','Ylim',,'Ycolor','k','YMinorTick','off');
set(AX(2),'XLim',,'XTickLabel',{'','',''},'XColor','k','XMinorTick','off','Ylim',,'YTickLabel',{'1','10','','',''},'Ycolor','k','YMinorTick','off','Visible','on');
set(H1,'linewidth',1.5,'linestyle','-','color','g');
set(H2,'linewidth',1.5,'linestyle','--','color','r');
XLabel({'激振频率 \itf \rm / Hz','b )'},'FontSize',10,'FontName','Times');
set(get(AX(1),'Ylabel'),'String','$$G_{\ddot{z}_2}(f)/\rm (m^2\cdot s^{-3})$$','Interpreter','latex');
set(get(AX(2),'Ylabel'),'String','$$\left|\frac{\ddot{z}_2}{\dot{q}}\right|^2/\rm s^{-2}$$','Interpreter','latex');
text('Interpreter','latex','String','$$\it G_{\dot{q}}(f)$$','Position',,'FontSize',10);
text('Interpreter','latex','String','$$\sigma{_{\ddot{z}_2}^2}$$','Position',,'FontSize',10);
text(36.84,0.01035,'10^2');
text(36.84,0.1035,'10^3');
text(36.84,1.035,'10^4');
box on;
hold on
%蓝色竖线___________________________________________________________________
for i=1:M
f_x=f_x_array(i);
plot(,)
hold on
end
%__________________________________________________________________________
%渐近线
X1=;
Y1=;
plot(X1,Y1,'k')
hold on
X2=;
Y2=;
plot(X2,Y2,'k')
hold on
X3=;
Y3=;
plot(X3,Y3,'k')
hold on
X4=;
Y4=;
plot(X4,Y4,'k')
hold on
X5=;
Y5=;
plot(X5,Y5,'k')
hold on
X6=;
Y6=;
plot(X6,Y6,'k')
hold on
text(0.3,6e-3,'+2:1','FontSize',10);
text(12,1e-2,'-4:1','FontSize',10);
%时间频率的不平度垂直速度的功率谱密度关系式
function Gdqf=fun2
global Gqn0 n0 u
Gdqf=4*pi^2*Gqn0*n0^2*u;
end
%双质量系统的车身加速度对路面不平度垂直速度函数的幅频特性
function Dddz2dq=fun7(f,f0,varsigma,gamma,mu)
Dddz2dq=fun1(f).*fun6(f,f0,varsigma,gamma,mu);
end%圆频率
function omega=fun1(f)
omega=2*pi*f;
end%双质量系统车身位移对路面位移的频率响应函数的幅频特性
function Dz2q=fun6(f,f0,varsigma,gamma,mu)
Dz2q=fun31(f,f0,varsigma).*fun5(f,f0,varsigma,gamma,mu);
end%单质量系统位移输入与位移输出的幅频特性(频率)
function Szqf=fun31(f,f0,varsigma)
Szqf=sqrt((1+(2*varsigma*(f/f0)).^2)./((1-(f/f0).^2).^2+(2*varsigma*(f/f0)).^2));
end%双质量系统车身位移对路面位移的频率响应函数的幅频特性
function Dz1q=fun5(f,f0,varsigma,gamma,mu)
Dz1q=gamma*sqrt(((1-(f/f0).^2).^2+4*varsigma^2*(f/f0).^2)./(((1-(f/f0).^2).*(1+gamma-1/mu*(f/f0).^2)-1).^2+(4*varsigma^2*(f/f0).^2.*(gamma-(1/mu+1)*(f/f0).^2).^2)));
end
[ 本帖最后由 ch_j1985 于 2008-6-8 13:15 编辑 ] 原帖由 ch_j1985 于 2008-4-29 18:30 发表 http://www.chinavib.com/forum/images/common/back.gif
请问,下图中阴影部分的斜线是怎么画出来的?
图是用双对数(loglog)画的,想要添加像图中那样的“剖面线”!
大家出出主意吧
斜线用Figure里的工具可以手工画,麻烦了一点 原帖由 friendchj 于 2008-6-9 22:53 发表 http://www.chinavib.com/forum/images/common/back.gif
斜线用Figure里的工具可以手工画,麻烦了一点
谢谢您的意见,手工画不是很准确,但是没有其它好的办法,只能这样啦 今天回了一帖http://forum.vibunion.com/forum/vi ... 15&page=1#pid392328, 使我回想起这一帖
忘记什麽时间看过此帖, 那时即有比如此类似想法, 但我极少使用3-D绘图指令, 一时未试出! 竟拖至今!
今又回忆起, 先说说我想法! 以免又忘记, 而且或许大家可以帮帮实践!
先产生一个斜线的图档obliq.tif, 再使用warp指令盖那区域!
刚刚试了下, 应该是可行的!
[ 本帖最后由 ChaChing 于 2008-12-21 15:12 编辑 ]
回复 10楼 ChaChing 的帖子
谢谢ChaChing,有时间再试试! 好贴,真正叫集中大家的智慧啊 10F的想法, 有空试了下!:@)好像并不适用, 虽然可以warp上图形, 但会有点变形
官网找了下, 好像有一现成的, 不过还没试 回复 Happy99 的帖子
有个hatch的函数,可以参考一下
http://forum.simwe.com/viewthread.php?tid=948702&page=1#pid2154618 hatch函数:来自mathworks官方functionhatch(obj,angle,color,style,step,width)
% HATCHHatches a two-dimensional domain.
% Somewhat similar to the FILL command but fills the closed
% contour with hatched lines instead of uniform color.
% The boundary line(s) must be created prior to this command
% and its handle(s) specified by OBJ argument.
% HATCH(OBJ) Hatchs the domain bounded by the Xdata and Ydata
% properties of the OBJ (can be line or patch type).
% HATCH by itself takes as OBJ the last object created in the
% current axes.
% HATCH(OBJ,ANGLE,COLOR,STYLE,STEP,WIDTH) Specifies additional
% parameters:slope of the hatches (in degrees),
% their color (, or 'r','g','b','w','y','c','m')
% the linestyle ('-','--','-.',':') and also the steps
% (distances between hatches) and the linewidth (thickness)
% of the hatch lines (the last two in points).
% All arguments are optional but must be in the given order.
% They also can be grouped in two vectors for convenience:
% HATCH(OBJ,,), where the last
% argument is a string: 'w--', '-.y' are both legal notations.
% LH = HATCH(OBJ) also returns the handle of a hatch line.
% OBJ can be a vector of several handles, in which case the
% composite boundary is hatched. If one contour lies within
% another, then the first one will appear as a "hole" in the
% outer contour.
%
% Examples:
% HATCH(L,30,,'--',8,2) or
% HATCH(L,,'r--') Hatchs a domain
% bounded by the contour L with red dashed lines of 2-point
% thickness and 8-point steps, inclined at 30 degrees
% to the x-axis.
% HATCH(,'CROSS')Hatches the domain with composite
% boundary with hatch parameters specified by the
% "macro" 'CROSS'(in this case two crossed hatches).
%
% Type HATCH('demo') to see all the macro effects available
%
% See also FILL, LINE, PATCH
%Kirill K. Pankratov,kirill@plume.mit.edu
%April 27 1994
%
%Modified for Matlab 5+, Iram Weinstein weinsteini@saic.com
%May 10, 2001
% Defaults ............
angledflt = 45; % Angle in degrees
colordflt = ; % Color
styledflt = '-'; % Linestyle
widthdflt = 1; % Thickness of the lines
stepdflt = 10; % Distance between hatches
widthdflt = 1; % Thickness of the lines
%macros .....................
macros={ 'hor''0.1 ,''w''';
'ver''90.1,''w''';
'thick' ',''w'''; % Thicker hatch lines
'thicky' ',''y''';
'Thick' ',''w''';
'dense' ''; % Denser lines
'Dense' '';
'fill' ''; % Fills almost uniformly
'filly' ',''y''';
'rare' '';
'Rare' '';
'rarethick' '';
'cross' '45 135'; % Two crossed hatches
'plus' '1 90.1'};
argcount=nargin;
% Handle input ::::::::::::::::::::::::::::::::::::::::::::::::::
% Check for macros ................
ismacro = 0;
if argcount==2
if isstr(angle)
macro = angle; ismacro = 1; angle = angledflt;
end
elseif argcount == 1
if isstr(obj),
if strcmp(obj,'demo'),
demo;
return
else
macro = obj; ismacro = 1; argcount = 0;
end
end
end
if argcount==0 % Find the object on figure
ch = get(gca,'child');
if ~isempty(ch), obj = ch(1);
else
disp()
return
end
end
%Hatch with macros ..........................................
if ismacro
match=strcmp(macros(:,1),macro);
if ~any(match),
disp(), return
end
call=macros(match,:);
call=call{2};
isbr = cumsum((call=='[')-(call==']'));
lc = length(call);
n0 = ;
for jf = 2:length(n0)
if nargout == 0, out = '';
elseif nargout==1, out = ['lh(' num2str(jf-1) ')='];
end
str = ;
eval(str)
end
return
end
if argcount<6, width = widthdflt; end
if argcount<5, step = stepdflt; end
if argcount<4, style = styledflt; end
if argcount<3, color = colordflt; end
if argcount<2, angle = angledflt; end
% Check for step and width in one vector
if length(angle)>1
step = angle(2);
if length(angle)>2, width = angle(3); end
angle = angle(1);
end
% Check for color and style in one string
if isstr(color)
A = color(ones(8,1),:)==setstr(ones(length(color),1)*'wyrgbcmk')';
n0 = find(any(A));
str = color(any(A)==0);
if ~isempty(n0), color = color(n0); end
if ~isempty(str)
iss = strcmp(str,'-')|strcmp(str,'--')|strcmp(str,'-.');
if iss|strcmp(str,':'), style = str; end
end
end
% Check for the object to be line or patch
typ = get(obj(1),'type');
if ~(strcmp(typ,'line')|strcmp(typ,'patch'))
disp()
return
end
angle = angle*pi/180; % Degrees to radians
% Combine all objects into a single contour
x = []; y = [];
for jo = 1:length(obj)% Get x,y
xx=get(obj(jo),'xdata');
x = ;
yy=get(obj(jo),'ydata');
y = ;
if jo == 1,
yi = find(~isnan(x)&~isnan(y));
if ~isempty(yi), n0 = yi(1); x0 = x(n0); y0 = y(n0);
else, x0 = 0; y0 = 0;
end
end
x = ; y = ; % Close loop
end
yi = find(~isnan(x)&~isnan(y));
x = x(yi); y = y(yi); % Remove NaN's
ll = length(x);
% Transform the coordinates .............................
oldu = get(gca,'units');
set(gca,'units','points')
sza = get(gca,'pos'); sza = sza(3:4);
xlim = get(gca,'xlim');
ylim = get(gca,'ylim');
islx = strcmp(get(gca,'xscale'),'log');
isly = strcmp(get(gca,'yscale'),'log');
if islx % If log scale in x
xlim = log10(xlim);
x = log10(x);
end
if isly % If log scale in y
ylim = log10(ylim);
y = log10(y);
end
xsc = sza(1)/(xlim(2)-xlim(1)+eps);
ysc = sza(2)/(ylim(2)-ylim(1)+eps);
ca = cos(angle); sa = sin(angle);
x0 = mean(x); y0 = mean(y);% Central point
x = (x-x0)*xsc; y = (y-y0)*ysc;
yi = x*ca+y*sa; % Rotation
y = -x*sa+y*ca;
x = yi;
y = y/step; % Make steps equal to one
% Compute the coordinates of the hatch line ...............
yi = ceil(y);
ll = length(y);
yd = ;
dm = max(abs(yd));
fnd = find(yd);
lfnd = length(fnd);
A = sign(yd(fnd));
edm = ones(dm,1);
A = A(edm,:);
if size(A,1)>1, A = cumsum(A); end
fnd1 = find(abs(A)<=abs(yd(edm,fnd)));
A = A+yi(edm,fnd)-(A>0);
xy = (x(fnd+1)-x(fnd))./(y(fnd+1)-y(fnd));
xi = x(edm,fnd)+(A-y(edm,fnd)).*xy(edm,:);
yi = A(fnd1);
xi = xi(fnd1);
% Sorting points of the hatch line ........................
li = length(xi);
xi0 = min(xi); xi1 = max(xi);
yi0 = min(yi); yi1 = max(yi);
ci = yi*(xi1-xi0)+xi;
= sort(ci);
xi = xi(num); yi = yi(num);
if floor(li/2)~=li/2
xi = ;
yi = ;
end
% Organize to pairs and separate byNaN's ................
li = length(xi);
xi = reshape(xi,2,li/2);
yi = reshape(yi,2,li/2);
xi = ;
yi = ;
xi = xi(:)'; yi = yi(:)';
% Transform to the original coordinates ...................
yi = yi*step;
xy = xi*ca-yi*sa;
yi = xi*sa+yi*ca;
xi = xy/xsc+x0;
yi = yi/ysc+y0;
if islx, xi = 10.^xi; end
if isly, yi = 10.^yi; end
% Now create a line to hatch ..............................
ax=axis;
lh = line('xdata',xi,'ydata',yi);
set(lh,'linewidth',width);
set(lh,'color',color)
set(lh,'linestyle',style)
set(gca,'units',oldu) % Set axes units back
axis(ax);
%------------------------
function demo
figure
subplot 211
h=bar(ones(2,7))
axis()
set(gca,'color',*0.9,'XTickLabel','','YTickLabel','')
hatch(h(1),'hor')
hatch(h(2),'ver')
hatch(h(3),'thick')
hatch(h(4),'thicky')
hatch(h(5),'Thick')
hatch(h(6),'dense')
hatch(h(7),'Dense')
x=0.65+*.11;
y=1.1*ones(size(x));
string=char({'hor', 'ver', 'thick','thicky','Thick','dense','Dense'});
text(x,y,string);
subplot 212
h=bar(ones(2,7))
axis()
set(gca,'color',*0.9,'XTickLabel','','YTickLabel','')
hatch(h(1),'fill')
hatch(h(2),'filly')
hatch(h(3),'rare')
hatch(h(4),'Rare')
hatch(h(5),'rarethick')
hatch(h(6),'cross')
hatch(h(7),'plus')
string=char({'fill','filly','rare','Rare','rarethick','cross','plus'});
text(x,y,string);
页:
[1]
2