gpt4 book ai didi

R:交互式绘图(工具提示):rCharts 凹坑图:格式化轴

转载 作者:行者123 更新时间:2023-12-04 11:06:35 24 4
gpt4 key购买 nike

我用 ggplot2 创建了一些图表我想嵌入到 Web 应用程序中:我想用工具提示增强绘图。我研究了几个选项。我目前正在试验 rCharts图书馆,其中包括酒窝图。

这是原始的ggplot:

enter image description here

这是将其转换为酒窝图的第一次尝试:

enter image description here

我有几个问题:

  • 用百分比格式化 y 轴后,数据被更改。
  • 格式化 x 轴以正确呈现日期后,打印了太多标签。

  • 我不依赖于酒窝图表,所以如果有其他选项可以更轻松地调整轴格式,我很高兴知道。 (莫里斯图表看起来也不错,但调整它们看起来更难,不是吗?)

    目标:修复坐标轴并添加提供日期(格式为 1984)和值(格式为 40%)的工具提示。

    如果我能修复 1 和 2,我会很高兴。但这是另一个不太重要的问题,以防有人提出建议:

    将鼠标悬停在线条上时,我可以将线条标签(“前 10%”)添加到工具提示中吗?

    下载数据后: https://gist.github.com/ptoche/872a77b5363356ff5399 ,
    创建一个数据框:
    df <- read.csv("ps-income-shares.csv")

    基本的凹坑图是用以下方法创建的:
    library("rCharts")
    p <- dPlot(
    value ~ Year,
    groups = c("Fractile"),
    data = transform(df, Year = as.character(format(as.Date(Year), "%Y"))),
    type = "line",
    bounds = list(x = 50, y = 50, height = 300, width = 500)
    )

    虽然基本,但到目前为止还不错。但是,以下旨在将 y 数据转换为百分比的命令会更改数据:
    p$yAxis(type = "addMeasureAxis", showPercent = TRUE)

    我做错了什么 showPercent ?

    作为引用,这里是 ggplot 代码:
    library("ggplot2")
    library("scales")
    p <- ggplot(data = df, aes(x = Year, y = value, color = Fractile))
    p <- p + geom_line()
    p <- p + theme_bw()
    p <- p + scale_x_date(limits = as.Date(c("1911-01-01", "2023-01-01")), labels = date_format("%Y"))
    p <- p + scale_y_continuous(labels = percent)
    p <- p + theme(legend.position = "none")
    p <- p + geom_text(data = subset(df, Year == "2012-01-01"), aes(x = Year, label = Fractile, hjust = -0.2), size = 4)
    p <- p + xlab("")
    p <- p + ylab("")
    p <- p + ggtitle("U.S. top income shares (%)")
    p

    有关信息,上图基于 汇总的数据。托马斯·皮凯蒂 伊曼纽尔·赛斯 在他们对美国最高收入的研究中。数据和更多信息可以在他们的网站上找到,例如

    http://elsa.berkeley.edu/users/saez/

    http://piketty.pse.ens.fr/en/

    编辑:

    这是 Ramnath 解决方案的屏幕截图,添加了标题并调整了轴标签。谢谢拉姆纳特!
    p$xAxis(inputFormat = '%Y-%m-%d', outputFormat = '%Y')
    p$yAxis(outputFormat = "%")
    p$setTemplate(afterScript = "
    <script>
    myChart.axes[0].timeField = 'Year'
    myChart.axes[0].timePeriod = d3.time.years
    myChart.axes[0].timeInterval = 10
    myChart.draw()
    myChart.axes[0].titleShape.remove() // remove x label
    myChart.axes[1].titleShape.remove() // remove y label
    myChart.svg.append('text') // chart title
    .attr('x', 40)
    .attr('y', 20)
    .text('U.S. top income shares (%)')
    .style('text-anchor','beginning')
    .style('font-size', '100%')
    .style('font-family','sans-serif')
    </script>
    ")
    p

    enter image description here

    要更改(而不是删除)轴标签,例如:
    myChart.axes[1].titleShape.text('Year')

    向绘图添加图例:
    p$set(width = 1000, height = 600)
    p$legend(
    x = 580,
    y = 0,
    width = 50,
    height = 200,
    horizontalAlign = "left"
    )

    要保存 rchart:
    p$save("ps-us-top-income-shares.html", cdn = TRUE)

    可以通过以下方式获得基于 nvd3 库的替代方案(没有任何花哨的东西):
    df$Year <- strftime(df$Year, format = "%Y")
    n <- nPlot(data = df, value ~ Year, group = 'Fractile', type = 'lineChart')

    最佳答案

    这是解决(1)和(2)的一种方法。论据 showPercent不是将 % 添加到值中,而是重新计算值,使它们叠加到 100%,这就是您看到您指出的行为的原因。

    此时,您将看到我们仍然需要编写自定义 javascript 来调整 x 轴以使其显示为我们想要的方式。在 future 的迭代中,我们将努力允许在 rCharts 中访问整个酒窝 API。

    df <- read.csv("ps-income-shares.csv")
    p <- dPlot(
    value ~ Year,
    groups = c("Fractile"),
    data = df,
    type = "line",
    bounds = list(x = 50, y = 50, height = 300, width = 500)
    )
    p$xAxis(inputFormat = '%Y-%m-%d', outputFormat = '%Y')
    p$yAxis(outputFormat = "%")
    p$setTemplate(afterScript = "
    <script>
    myChart.axes[0].timeField = 'Year'
    myChart.axes[0].timePeriod = d3.time.years
    myChart.axes[0].timeInterval = 5
    myChart.draw()

    //if we wanted to change our line width to match the ggplot chart
    myChart.series[0].shapes.style('stroke-width',1);

    </script>
    ")
    p

    关于R:交互式绘图(工具提示):rCharts 凹坑图:格式化轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23462320/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com