Matlab:由vector指定的x值的垂直线(Matlab: vertical lines at x-values specified by vector)
我有一个x值向量,我想在图中添加垂直线,比如行向量: vec = [1 2 3 4 5]
我知道你可以像这样添加单个垂直线:
plot([1 1],[0 1])
(在y = 0到y = 1的情况下,在x = 1处给出垂直线)。
但是,当我尝试类似的东西
vec = [1 2 3 4 5]; lowLine = [0 0 0 0 0]; highLine = [1 1 1 1 1]; plot([vec vec],[lowLine highLine])
它没有给出所需的结果,而是给出了z形。 我哪里错了?
I have a vector of x-values at which I would like to add vertical lines to a graph, say a row vector: vec = [1 2 3 4 5]
I know that you can add single vertical lines like this:
plot([1 1],[0 1])
(gives a vertical line at x=1 from y=0 to y=1).
But when I try something like
vec = [1 2 3 4 5]; lowLine = [0 0 0 0 0]; highLine = [1 1 1 1 1]; plot([vec vec],[lowLine highLine])
It does not give the required result, instead it gives a z-shape. Where am I going wrong?
原文:https://stackoverflow.com/questions/36885295
更新时间:2019-12-08 10:20
最满意答案
为了在单个图中绘制多条线,您需要使用MATLAB的plot函数将矩阵作为输入处理的事实,并且它将输入的每列视为不同的图:
如果X和Y都是矩阵,那么它们必须具有相同的大小。 绘图函数绘制Y的列与X的列。
因此,为了获得预期的结果,您需要写:
vec = [1 2 3 4 5];
lowLine = [0 0 0 0 0];
highLine = [1 1 1 1 1];
plot([vec;vec],[lowLine;highLine])
结果:
In order to plot several lines in a single plot, you need to use the fact that MATLAB's plot function handles matrices as inputs, and that it sees each column of the inputs as different plots :
If X and Y are both matrices, then they must have equal size. The plot function plots columns of Y versus columns of X.
Thus, in order to get the expected result, you need to write :
vec = [1 2 3 4 5];
lowLine = [0 0 0 0 0];
highLine = [1 1 1 1 1];
plot([vec;vec],[lowLine;highLine])
Result :
2016-04-27
相关问答
试试geom_vline : ggplot(df.m) +
geom_freqpoly(aes(x=value, y=..density.., colour=variable)) +
geom_vline(xintercept=c(-3,3), linetype="dotted")
Try geom_vline: ggplot(df.m) +
geom_freqpoly(aes(x=value, y=..density.., colour=variable)) +
geom_vl
...
solve返回一个复数。 如果你只是想要真正的部分把Re放在它周围。 ggplot(df, aes(x=x, y=y))+
geom_jitter(size=1, alpha=0.2,height=0.05)+
stat_smooth(method="glm",
formula=y~poly(x,degree=2,raw=TRUE),
method.args =list(family = "binomial"),
...
你明白了吧! 只需将您的最后一行代码更改为以下内容: h1 = fill([x1 x1 x2 x2], [y2 fliplr(y2)], 'b','EdgeColor','none');
fill()函数将输入区域(多边形)的拐角(顶点)的x和y坐标作为输入,以顺时针或逆时针方式填充颜色(多边形不需要关闭( fill可以关闭它为你))。 在这里,我们已经从左下角的顶点开始按顺时针顺序传入了由两条线所包围的多边形的四个顶点的x和y坐标的矢量数组。 注意: fliplr()函数只是从左向右反转1x2
...
为了在单个图中绘制多条线,您需要使用MATLAB的plot函数将矩阵作为输入处理的事实,并且它将输入的每列视为不同的图: 如果X和Y都是矩阵,那么它们必须具有相同的大小。 绘图函数绘制Y的列与X的列。 因此,为了获得预期的结果,您需要写: vec = [1 2 3 4 5];
lowLine = [0 0 0 0 0];
highLine = [1 1 1 1 1];
plot([vec;vec],[lowLine;highLine])
结果: In order to plot several
...
首先,您不必为geom_vline使用aes 。 您只需提供值即可。 其次, ggplot会在生成绘图时将字符变量转换为数字。 因此,您还需要转换值。 你可以通过添加seq_along 。 它隐式地将字符更改为数值(1,2,3 ......)。 ggplot(theDF, aes(x=YrQtr, y=Minutes)) +
geom_point() +
theme(axis.text.x=element_text(angle=90))+
geom_vline(xintercept
...
根据@Bogdan M.关于使用div元素的建议,我设置了一个jsFiddle,演示了使用jQuery构建的垂直条 。 它将值的输入作为数组转发,并将它们转换为DOM元素,相应地设置它们的高度。 可以非常轻松地更新此演示以使用OP提供的数据结构,并且还可以添加选择行为功能。 最终版本(包含用于构建组件和为其分配选择行为的完整解决方案)可以在jsFiddle的完整演示中看到 。 现在剩下的就是将选择功能的处理程序 - 作为单元/行侦听器 - 分配给KendoUI网格。 Based on @Bogda
...
核心绘图将在主要刻度位置绘制网格线。 确保日期值与tick位置相对应, gridLineStyle是一种将在白色背景下显示的样式。 Core Plot will draw grid lines at the major tick locations. Make sure the date values correspond with the tick locations and gridLineStyle is a style that will appear against the white
...
假设你有两组绘图变量x1 , y1 , x2 , y2 。 在你的情况 plot(20*log10(r), q, 20*log10(z), w);
给 x1 = 20*log10(r); y1 = q;
x2 = 20*log10(z); y2 = w;
主要任务是找到给定y值的x值,最简单的方法是使用interp1插值。 在你的例子中, ypoint = 10^(-1) x1point = interp1(y1, x1, ypoint);
这是一个简单的线性插值,还有其他可能适合您的选项,
...
由于您没有为image提供x和y参数而只提供z矩阵,因此默认情况下seq(0,1,nrow(z))和seq(0,1,ncol(z))为x和y值。 因此,您的垂直线必须在[0,1]范围内表示。 假设您的10个第一列中的100个是一组然后abline(v=.1)应该这样做。 当然,你可以更方便地直接声明ax和ay,这样你就可以更好地控制它。 Since you didn't provide x and y arguments to image but only a z matrix, it took
...