传奇中的颜色与许多组

时间:2015-05-05 12:38:43

标签: r plot legend

我知道这可能是一个简单的问题,但我真的很挣扎......

iris数据集为例,我可以使用以下代码根据不同的物种执行不同颜色的绘图:

plot(iris$Sepal.Length, iris$Sepal.Width, col=iris$Species)
legend('topright', legend=c("setosa", "virginica", "versicolor"))

但实际上我无法在图例中添加绘图调用中使用的相同颜色。

此外,我使用的数据集有几个唯一值。有没有办法添加颜色而不手动指定它们?

ggplot会根据aes选项中使用的颜色自动添加图例,但我需要对plot包执行相同的操作。

有简单的解决方案吗?

由于

2 个答案:

答案 0 :(得分:1)

你可以试试这个

$dom = new DOMDocument;
$dom->loadHTML($variable, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$br_tags = $dom->getElementsByTagName('br');
$i = $br_tags->length - 2; // -2 to leave the last one conversion
while($i > -1) {
    $br = $br_tags->item($i);
    $pipe = $dom->createTextNode('|');
    $br->parentNode->replaceChild($pipe, $br);
    $i--;
}

echo $dom->saveHTML();

答案 1 :(得分:1)

你的情节调用使用与iris$Species的值对应的默认颜色(即1,2,3,记住它'因子,请参阅as.numeric(iris$Species)的输出!)

对于只有少数几个类,简单的解决方案是执行以下操作:

cols <- c("darkgreen", "darkblue", "orange")
plot(iris$Sepal.Length, iris$Sepal.Width, col=cols[iris$Species], pch=20)

legend('topright', legend=levels(iris$Species), 
       col= cols, pch=20)

更通用的解决方案是使用颜色调色板,例如使用heat.colorsgray.colorsrainbow.colors等功能

cols <- heat.colors(5) // 5 is the number of colors in the palette

RColorBrewer包中找到了更多精美的调色板。

此外,colorRampPalette功能允许您混合这些调色板以获得更平滑的结果。例如:

library(RColorBrewer)
colorRampPalette(brewer.pal(9,"Blues"))(100)