天道酬勤,学无止境

Different colors for lines as opposed to points in R

I have a dataset of Cartesian coordinates. I want to make a basic scatter plot where each point is colored according to a pre-set vector of colors. This is easy to achieve with something like the following example.

# A hypothetical dataset
XCoords<-c(1,3,5,6,8)
YCoords<-c(3,9,4,3,4)

# Sorry for picking such ugly colors, its just an example
Colors<-c("#FDA75F","#F1E19D","#E5AC4D","#FDC07A","#FDB46C")

# Plot the scatter plot
plot(x=XCoords,y=YCoords,pch=16,col=Colors)

However, if I want to draw a line between the points using type="o" or type="b" (depending on the system), the color of that line will default to the first color in the Colors vector.

# An example using type="o"
plot(x=XCoords,y=YCoords,pch=16,col=Colors,type="o")

What if I want the line to be a completely different color, e.g. black? In other words, how can I set the color of the line connecting the points to be independent of the coloring scheme of the points.

I am specifically looking for a solution to this problem in base (no ggplot), and ideally one that does not ask me to plot the lines and points in two separate steps (though if that's the only way, that's okay).

标签

评论

I think the correct way to do this is actually to do it in two steps:

plot(x=XCoords,y=YCoords,pch=16,col=Colors)
lines(x = XCoords,y=YCoords,col = "black")

The lines() function unfortunately does not seem to respect a multielement vector of colors for the col argument. Fortunately, segments() does, so you can do something like this:

## a hypothetical dataset
x <- c(1,3,5,6,8);
y <- c(3,9,4,3,4);

## separate point and line colors
col.point <- c('red','green','blue','yellow','cyan');
col.line <- c('magenta','black','grey','brown');

## scatter plot
plot(x,y,pch=16L,col=col.point);
##lines(x,y,col=col.line); ## bad, would only use col.line[1L]
segments(x[-length(x)],y[-length(y)],x[-1L],y[-1L],col=col.line);

# A hypothetical dataset
df <- data.frame(
  x = rep(seq(2000, 2019, 1), 5),
  y = rnorm(100),
  id = rep(1:5, each = 20)
)


cols <- data.frame(
  col = palette.colors(length(unique(df$id))),
  id = unique(df$id)
)

# Plot 
with(df, {
  plot(x, y, pch = 16, col = cols$col[match(id, cols$id)], type = "p")
  for (l in unique(id)) {
    lines(x[id == l], y[id == l], type = "l", col = cols$col[match(l, cols$id)])
  }
}))

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • chart.js 线图:填充线上方的区域,而不是下方和右侧(chart.js LIne Graphs: Fill area above line as opposed to below and to the right)
    问题 我有一个chart.js,它显示两条不同的线,一条线总是正的,一条线总是负的。 我想可视化两条线之间的区域和 y 轴上的 0 值,因此想要填充正线下方和负线上方,两者都以 0 结尾。然而,Chart.js 总是将线填充到据我所知,给定行的右下角。 正确的行为:(来自chartist.js) 不正确的行为(来自 chart.js) 有谁知道是否可以使用chart.js 实现类似于第一个图形的外观? 编辑: 我通过它的 ember 插件使用 chart.js {{ember-chart type='Line' data=dataPanelService.chartData width=500 height=600}} 所以我只传入chartData。 它应该使用默认选项。 dataPanelService 中的图表数据: chartData: { labels: ["9 /15 /15", "9 /28 /15", "10 /5 /15", "10 /13 /15", "10 /19 /15", "10 /30 /15", "11 /15 /15"], datasets: { { fillColor: "#FF1717", pointColor: "#da3e2f", data: [200000, 180000, 150000, 110000, 60000, 0, 0] }, {
  • 反转相反的颜色(Reverse opposing colors)
    问题 我有一个用户设置,他们可以在其中选择警报的颜色。 Alert 是文本或按钮上的背景颜色。 但问题在于,如果他们选择深蓝色而我们有黑色字母,则对比度不够,您无法阅读。 我试图制作一个函数来获得相反的颜色,但还没有走得太远。 有这样的功能吗? 回答1 我发现对我来说最好的解决方案是将 RGB 值转换为 YIQ 值。 因为我们只对亮度值(用 Y 表示)感兴趣,所以只需要完成一个计算: Y = (299*R + 587*G + 114*B)/1000 。 其 Java 代码如下所示: public static Color getContrastColor(Color color) { double y = (299 * color.getRed() + 587 * color.getGreen() + 114 * color.getBlue()) / 1000; return y >= 128 ? Color.black : Color.white; } 您可以看到它只是根据原始颜色的亮度决定使用黑色还是白色。 在我看来,结果非常好。 权重 (299, 587, 114) 与眼睛对相应颜色的敏感度(或者更确切地说是视网膜的敏感度)成正比。 回答2 使用互补色: 算法很简单,从255中减去每个颜色分量,得到新的颜色分量 Color textColor = Color.rgb(255
  • RGB YUV XYZ HSL CIE1976L*a*b* LCH的色彩空间图 色彩空间 转换公式
    一.颜色空间及分类 (一)颜色空间 颜色常用颜色空间来表示。颜色空间是用一种数学方法形象化表示颜色,人们用它来指定和产生颜色。例如, 对于人来说,我们可以通过色调、饱和度和明度来定义颜色; 对于显示设备来说,人们使用红、绿和蓝磷光体的发光量来描述颜色; 对于打印或者印刷设备来说,人们使用青色、品红色、黄色和黑色的反射和吸收来产生指定的颜色。 颜色空间有设备相关和设备无关之分。设备相关的颜色空间是指颜色空间指定生成的颜色与生成颜色的设备有关。例如,RGB颜色空间是与显示系统相关的颜色空间,计算机显示器使用RGB来显示颜色,用像素值(例如,R=250,G=123,B=23)生成的颜色将随显示器的亮度和对比度的改变而改变。设备无关的颜色空间是指颜色空间指定生成的颜色与生成颜色的设备无关,例如,CIE Lab*颜色空间就是设备无关的颜色空间,它建筑在HSV(hue, saturation and value)颜色空间的基础上,用该空间指定的颜色无论在什么设备上生成的颜色都相同。 (二)颜色空间分类 颜色感知 从颜色感知的角度来分类,颜色空间可考虑分成如下三类: Ø 混合(mixture)型颜色空间:按三种基色的比例合成颜色。例如,RGB,CMY(K)和XYZ等颜色空间就属于这种类型。 Ø 非线性亮度/色度(luma/chroma)型颜色空间:用一个分量表示非色彩的感知
  • Draw a curved line from an arc edge
    Here's the screenshot of what I am doing. Currently, I'm stuck from drawing a curved borders into this rectangle. My first solution was: draw a quartered circle behind the rectangle, but if I adjust the opacity of the shape, as you can see, the quartered circle gets shown. I know this is pretty basic for you guys but I'm not really good at math. I did try to reuse the computed edges of the arc and add the size of border but I got this as a result. I also think of bezier curves as a replacement but I think it is more efficient to just reuse the computed vertices and add all the missing ones
  • 有没有办法在 R 中制作漂亮的“流程图”或“线面积”图?(Is there a way to make nice “flow maps” or “line area” graphs in R?)
    问题 我试图找到一种方法来直接在 R 中重新创建这样的图形(而不是在我在 R 中完成分析后用 Inkscape 手动绘制它们): 和 第一个看起来应该是直截了当的,但我找不到适合我需要的任何东西......第二个要复杂得多,但似乎也应该可行。 这篇文章状态转换的图表流程图让我接近(它已经有点棒了,除了我不一定有一个方阵,我想为我的线指定一个开始/结束位置,并控制厚度和阿尔法基于我自己的数据)... 是否可以使用 ggplot (或者其他类似格子的东西,如果它看起来不错)来做到这一点? 回答1 这是一个使用基本图形开始使用左图的示例(如果您想使用这些,也有用于网格图形的 xspline 函数,我不知道如何将它们与 ggplot2 合并,但格子可能不会太难的): plot.new() par(mar=c(0,0,0,0)+.1) plot.window(xlim=c(0,3), ylim=c(0,8)) xspline( c(1,1.25,1.75,2), c(7,7,4,4), s=1, lwd=32.8/4.5, border="#0000ff88", lend=1) xspline( c(1,1.25,1.75,2), c(6,6,4,4), s=1, lwd=19.7/4.5, border="#0000ff88", lend=1 ) xspline( c(1,1.25,1
  • How to draw lines in different colors?
    I have developed an application which draws lines on the screen .I want to use different colors for the lines but all the lines are appearing in same color. I have a color picker in my code to change the colors and i want to draw lines of different colors each time by selecting colors, but as of now since i am constructing lines and rendering it.When i choose initially red and draw a line, and then later select blue and draw a line , now the older line is also getting changed to blue instead of red, However i want the red to remain as red, and blue as such can any one help? My code is given
  • R Scatter Plot: symbol color represents number of overlapping points
    Scatter plots can be hard to interpret when many points overlap, as such overlapping obscures the density of data in a particular region. One solution is to use semi-transparent colors for the plotted points, so that opaque region indicates that many observations are present in those coordinates. Below is an example of my black and white solution in R: MyGray <- rgb(t(col2rgb("black")), alpha=50, maxColorValue=255) x1 <- rnorm(n=1E3, sd=2) x2 <- x1*1.2 + rnorm(n=1E3, sd=2) dev.new(width=3.5, height=5) par(mfrow=c(2,1), mar=c(2.5,2.5,0.5,0.5), ps=10, cex=1.15) plot(x1, x2, ylab="", xlab="", pch
  • 如何绘制不同颜色的线条?(How to draw lines in different colors?)
    问题 我开发了一个在屏幕上绘制线条的应用程序。我想为线条使用不同的颜色,但所有线条都以相同的颜色出现。 我的代码中有一个颜色选择器来更改颜色,我想每次通过选择颜色来绘制不同颜色的线条,但到目前为止,因为我正在构建线条并渲染它。当我最初选择红色并绘制线条时,然后选择蓝色并画一条线,现在旧的线也变成蓝色而不是红色,但是我希望红色保持红色,这样的蓝色有人可以帮忙吗? 我的代码如下 我的Demo.java: public class MyDemo extends Activity implements ColorPickerDialog.OnColorChangedListener { private LinearLayout root; private Button btnReset; private Button btnPickColor; public static int selectedColor = Color.BLACK; MyImageView view; private static final String COLOR_PREFERENCE_KEY = "color"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState)
  • In R, using geom_path with different size and color parameters
    I'm really struggling with the size and color parameters of geom_path in ggplot2. Let me share my data and code (both short) with you first, then show the plot I'm getting, then explain what plot I am trying to obtain. I'm really confused with this output right now: # the data - x and y coordinates to plot x_loc = c(39.29376, 39.44371, 39.59578, 39.7439, 39.88808, 40.18122, 40.92207, 41.91831, 42.09564, 42.27909, 81.77751, 81.79779, 81.81031, 81.81723, 81.81997, 81.81846) y_loc = c(21.02953, 20.91538, 20.80633, 20.69479, 20.58158, 20.37095, 19.87498, 19.38372, 19.31743, 19.26005, 35.55103, 35
  • 在 R 中,使用具有不同大小和颜色参数的 geom_path(In R, using geom_path with different size and color parameters)
    问题 我真的很纠结 ggplot2 中 geom_path 的大小和颜色参数。 让我先与您分享我的数据和代码(都很短),然后展示我得到的图,然后解释我想要得到的图。 我现在真的对这个输出感到困惑: # the data - x and y coordinates to plot x_loc = c(39.29376, 39.44371, 39.59578, 39.7439, 39.88808, 40.18122, 40.92207, 41.91831, 42.09564, 42.27909, 81.77751, 81.79779, 81.81031, 81.81723, 81.81997, 81.81846) y_loc = c(21.02953, 20.91538, 20.80633, 20.69479, 20.58158, 20.37095, 19.87498, 19.38372, 19.31743, 19.26005, 35.55103, 35.64354, 35.7384, 35.82535, 35.9067, 35.98656) # creating the factor with which to base size and color off of end = length(x_loc) distances = sqrt(((x_loc[2:end] - x_loc
  • 如何反转颜色?(How do I invert a colour?)
    问题 我知道这不会直接反转颜色,只会“反对”它。 我想知道是否有人知道一种简单的方法(几行代码)来将颜色从任何给定的颜色反转? 目前,我有这个(这不完全是反转的定义,因为如果我将其传递为灰色/灰色,它将返回极其相似的内容,例如127、127、127): const int RGBMAX = 255; Color InvertMeAColour(Color ColourToInvert) { return Color.FromArgb(RGBMAX - ColourToInvert.R, RGBMAX - ColourToInvert.G, RGBMAX - ColourToInvert.B); } 回答1 这取决于您“反转”颜色是什么意思 您的代码提供了“负”颜色。 您是否要寻找青色的红色,紫色的绿色,黄色的蓝色(依此类推)? 如果是这样,则需要在HSV模式下转换RGB颜色(您将在此处进行转换)。 然后,您只需要反转Hue值(将Hue更改为360-Hue )并转换回RGB模式。 编辑:正如Alex Semeniuk所提到的那样,通过(Hue + 180) % 360更改Hue是一个更好的解决方案(它不会反转Hue,但会在色环上找到相反的颜色) 回答2 您可以使用 : MyColor=Color.FromArgb(MyColor.ToArgb()^0xffffff)
  • 从 SKlearn 决策树中检索决策边界线(x,y 坐标格式)(Retrieve Decision Boundary Lines (x,y coordinate format) from SKlearn Decision Tree)
    问题 我正在尝试在外部可视化平台上创建曲面图。 我正在使用 sklearn 决策树文档页面上的 iris 数据集。 我也使用相同的方法来创建我的决策曲面图。 我的最终目标不是 matplot lib 视觉对象,所以从这里我将数据输入到我的可视化软件中。 为此,我只是在xx 、 yy和Z上调用flatten()和tolist()并编写了一个包含这些列表的 JSON 文件。 问题是当我尝试绘制它时,我的可视化程序崩溃了。 结果发现数据太大了。 展平后,列表的长度大于 86,000。 这是因为步长/绘图步长非常小.02 。 因此,根据模型的预测,它本质上是在数据的最小值和最大值的范围内逐步进行并绘制/填充。它有点像像素网格; 我将大小缩小到只有 2000 的数组,并注意到坐标只是来回移动的线(最终包含整个坐标平面)。 问题:我可以检索决策边界线本身的 x,y 坐标吗(而不是遍历整个平面)? 理想情况下,列表只包含每条线的转折点。 或者,是否有其他完全不同的方式来重新创建这个图,以便它在计算上更有效率? 这在某种程度上通过更换可视化contourf()与调用countour() 我只是不确定如何检索管理这些行的数据(通过xx 、 yy和Z或可能的其他方式?)。 注意:只要计算效率高,我对包含行格式的列表/或数据结构的确切格式并不挑剔。 例如,对于上面的第一个图
  • R散点图:符号颜色代表重叠点的数量(R Scatter Plot: symbol color represents number of overlapping points)
    问题 当许多点重叠时,散点图可能很难解释,因为这样的重叠会掩盖特定区域中的数据密度。 一种解决方案是对绘制的点使用半透明的颜色,以使不透明区域指示在这些坐标中存在许多观测值。 以下是我在R中的黑白解决方案的示例: MyGray <- rgb(t(col2rgb("black")), alpha=50, maxColorValue=255) x1 <- rnorm(n=1E3, sd=2) x2 <- x1*1.2 + rnorm(n=1E3, sd=2) dev.new(width=3.5, height=5) par(mfrow=c(2,1), mar=c(2.5,2.5,0.5,0.5), ps=10, cex=1.15) plot(x1, x2, ylab="", xlab="", pch=20, col=MyGray) plot(x1, x2, ylab="", xlab="", pch=20, col="black") 但是,我最近在PNAS中遇到了这篇文章,该文章采用了类似的方法,但是使用了热图着色而不是不透明性来指示有多少点重叠。 本文是Open Access,因此任何人都可以下载.pdf并查看图1,其中包含我要创建的图形的相关示例。 本文的方法部分指出分析是在Matlab中完成的。 为了方便起见,以下是上述文章中图1的一小部分:
  • Flex items with same property values are rendering in different sizes
    I'm using Flexbox to make a responsive site (first time I've done either of those, bear in mind) and it was all going well until I realised at some point that flex items with the same properties weren't behaving the same way. Have a look at this, I had some issues with the page in Chrome even though I ran the CSS through Autoprefixer, but that's another issue. If you have issues with this, it might be an idea to open it in Safari, which I started testing it in. You'll have to narrow the JS window to make the left-hand side visible. https://jsfiddle.net/5p7fcmxb/1/ It's ugly as sin, since I
  • R:点和线为不同颜色的图例(对于相同的图例项)(R: legend with points and lines being different colors (for the same legend item))
    问题 使用图例()函数是否可以使点和线具有不同的颜色? 我觉得我错过了一些相当明显的东西。 pt.bg选项可以更改背景颜色,但我没有看到pt.fg选项 当您分别使用不同颜色的 lines() 和 points() 命令并希望图例表示绘制的内容时,就会出现这种情况。 我认为merge选项可能是可能的,但我显然不太明白这是做什么的。 例子: plot( 0, type="n", xlim=c(0,5), ylim=c(0,5) ) A <- matrix( c( c(1,2,3,4), c(2,1,2,4)), ncol=2 ) B <- matrix( c( c(1,2,3,4), c(1,3,3,2)), ncol=2 ) lines( A, col="red" ) points( A, col="blue", pch=15 ) lines( B, col="green" ) points( B, col="purple", pch=17 ) legend( x="topleft", legend=c("Red line, blue points","Green line, purple points"), col=c("red","green"), lwd=1, lty=c(1,2), pch=c(15,17) ) legend( x="bottomleft", legend=c
  • R: legend with points and lines being different colors (for the same legend item)
    Using the legend() function is it possible to have the point and line be different colors? I feel like I'm missing something fairly obvious. The pt.bg option can change the background color, but I'm not seeing a pt.fg option The arises in the case when you use the lines() and points() command separately with different colors and want the legend to represent what is plotted. I thought it might be possible with the merge options, but I clearly don't quite understand what that is for. Example: plot( 0, type="n", xlim=c(0,5), ylim=c(0,5) ) A <- matrix( c( c(1,2,3,4), c(2,1,2,4)), ncol=2 ) B <-
  • R 从函数内部访问列时的不同行为,而不是交互式(R different behavior when accessing columns from within function as opposed to interactively)
    问题 我有一个名为granular的数据框,在相关部分中包含: 因子列GranularClass ,其值之一是"Constitutional Law I Spring 2016" ,以及几个数字列,例如Knowledge 。 数字列包含 NA。 我正在尝试编写一个函数来计算给定列的非 NA 值,条件是给定的因子值。 但是,根据我是将其编写为函数还是仅在控制台中使用它,我尝试计算值的行为会有所不同。 更具体地说,以下代码失败: # take subset of the dataframe containing only the factor values I want to look at: isolate <- function(class) { return(granular[granular$GranularClass == class, ]) } # count non-NA values: cr <- function(df, column){ return(sum(!is.na(df$column))) } # this fails cr(isolate("Constitutional Law I Spring 2016"), Knowledge) 最后一次调用给出了错误的输出(它只返回 0),并引发警告: Warning message: In is.na(df
  • 弱监督学习--半监督学习(2):VAT:Virtual Adversarial Training
    前言 在 Temporal ensembling Model 被提出的同年,日本的研究人员从对抗训练的角度出发,提出了 VAT 算法。这一算法的出发点与 Temporal ensembling Model 基本一致,即模型所描述的系统应该是光滑的,因此当输入数据发生微小变化时,模型的输出也应是微小变化,进而其预测的标签也近似不变。 VAT 与 Temporal ensembling Model 的不同之处在于,后者采用数据增强、dropout 来对无标签数据施加噪声,而前者施加的则是模型变化最陡峭方向上的噪声,即所谓的对抗噪声。在作者看来,如果模型在对抗噪声下,依然能够保持光滑,那么整个网络就能够表现出很好的一致性。 局部分布平滑(LDS) 局部分布平滑度(LDS)可以定义为模型输出分布相对于输入的平滑度。我们不希望模型对输入中的小扰动敏感。我们可以说,对于模型输入的微小变化,模型输出不应该有大的变化。 在LDS正则化中,模型分布的平滑性得到奖励。它也是网络上参数的不变量,仅取决于模型输出。具有平滑的模型分布应该有助于模型更好地推广,因为模型将为看不见的数据点提供类似的输出,这些数据点接近训练集中的数据点。一些研究表明,使模型对小的随机扰动具有鲁棒性对于正则化是有效的。 LDS正则化的一种简单方法是通过在实际数据点上应用小的随机扰动来生成人工数据点。之后
  • 从圆弧边缘画一条曲线(Draw a curved line from an arc edge)
    问题 这是我正在做的事情的屏幕截图。 目前,我无法在这个矩形中绘制弯曲的边框。 我的第一个解决方案是:在矩形后面画一个四等分圆,但是如果我调整形状的不透明度,如您所见,四等分圆就会显示出来。 我知道这对你们来说很基础,但我不太擅长数学。 我确实尝试重用弧的计算边缘并添加边框的大小,但结果我得到了这个。 我也将贝塞尔曲线视为替代品,但我认为仅重用计算出的顶点并添加所有缺失的顶点会更有效。 另外,我不知道如何计算贝塞尔曲线的弯曲点,找到合适的t数量会非常昂贵,所以我没有实现它。 这是我如何绘制内部四分之一圆的代码,我想我可以重用它。 void drawArc(int x, int y, int startAngle, int endAngle, uint32_t radiusX, uint32_t radiusY, int border_x, int border_y, const rgb color, const rgb bcX, const rgb bcY, uint8_t opacity) { if (radiusX <= 0 || radiusY <= 0) return; static constexpr float DTR = 3.14159 / 180; float cx, cy; int step; static std::vector<float> verts
  • Codeforces Round #617 (Div. 3) A、B、C、D、E
    A. Array with Odd Sum time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard output You are given an array a consisting of n integers. In one move, you can choose two indices 1≤i,j≤n such that i≠j and set ai:=aj. You can perform such moves any number of times (possibly, zero). You can choose different indices in different operations. The operation := is the operation of assignment (i.e. you choose i and j and replace ai with aj). Your task is to say if it is possible to obtain an array with an odd (not divisible by 2) sum of elements. You have to