ggplot2密度图与离散数据

时间:2017-12-20 11:43:42

标签: r plot ggplot2 density-plot

我想用以下数据创建密度图:

function runQuery() {
  var configuration = {
    "query": {
    "useQueryCache": false,
    "useLegacySql": false,
    "query": "UPDATE `<your_projectId>.<your_dataset>.<your_table>` SET field1 = '72142',field2 = 'Yes' WHERE field3 like '%72142%' AND field1 IS NULL"
    }
  };

  var job = {
    "configuration": configuration
  };

  var jobResult = BigQuery.Jobs.insert(job, "<your_projectId>");
  Logger.log(jobResult);
}

在X轴上我希望有间隔,在Y轴上我希望有不同颜色的“fr”,“mi”和“ab”的密度。

我的想象力就像这张图。

enter image description here

我的问题是我不知道如何在Y轴上获得密度。我用 interval fr mi ab 0x 9765 3631 12985 1x 2125 2656 601 2x 1299 2493 191 3x 493 2234 78 4x 141 1559 20 5x and more 75 1325 23 试了一下,但是没用。我完成的最好结果是使用以下代码:

geom_density

这给了我以下情节,这不是我想要的结果。你知道我怎么能得到我想要的结果吗?非常感谢你。

enter image description here

1 个答案:

答案 0 :(得分:0)

查看您的示例数据,我不确定您是否要使用geom_density。如果您输入?geom_density,您会看到一些示例代码。如果我从帮助页面中提取一个示例,您可能会看到缺少的内容。

ggplot(diamonds, aes(depth, fill = cut, colour = cut)) +
geom_density(alpha = 0.1) +
xlim(55, 70)

对于x轴,depth是连续变量,而不是分类变量。您当前的数据在x轴上有一个分类变量。对于geom_density,您正在寻找x轴上某个值的密度。上面的示例代码表明,分类为“理想”的钻石密度在61.5-62附近具有高密度,这表明最大比例的“理想”钻石的深度值约为61.5-62。实际上,“理想”钻石深度的平均值是61.71。这意味着您需要多个数据点来计算密度。您的数据每个组的每个间隔只有一个数据点(例如,ab,fr,mi)。因此,我认为您的数据还没有为计算密度做好准备。

如果您想使用当前数据绘制类似于您在问题中建议的图形,我认为您需要1)将interval转换为数字变量,2)将数据转换为长格式, 3)使用stat_smooth

library(tidyverse)

mydf %>%
mutate(interval = as.numeric(sub(x = as.character(interval), pattern = "x", replacement = ""))) %>%
gather(key = group, value = value, - interval) -> temp

ggplot(temp, aes(x = interval, y = value, fill = group)) +
stat_smooth(geom = "area", span = 0.4, method = "loess", alpha = 0.4)

enter image description here

相关问题