一、簡介
經常利用Python進行數據可視化的朋友一定用過或聽說過plotly這樣的神器,我在(數據科學學習手札43)Plotly基礎內容介紹中也曾做過非常詳細的介紹,其渲染出的圖像以瀏覽器為載體,非常精美,且繪制圖像的自由程度堪比ggplot2,其為R也提供了接口,在plotly包中,但對於已經習慣用ggplot2進行可視化的朋友而言,自然是不太樂意轉向plotly的學習,有趣的是plotly的R包中有着函數ggplotly(),可以將ggplot2生成的圖像轉換為交互式的plotly圖像,且還可以添加上ggplot2原生圖像中無法實現的交互標簽,最重要的是其使用方法非常傻瓜式,本文就將結合幾個小例子來介紹ggplotly()的神奇作用;
二、ggplotly()的使用
我們從一個簡單的小例子出發:
library(tidyverse) library(plotly) p <- ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width, color=Species, shape=Species)) + geom_point(size=6, alpha=0.6) p
這里我們利用R自帶的鳶尾花數據繪制了一個簡單的散點圖,接着我們只需要簡單的一行代碼就可以實現神奇的轉換效果:
library(plotly)
ggplotly(p)
可以觀察到,經過ggplotly()處理后的ggplot2圖像通過R-studio中的viewer窗口打開,即當前的圖像是網頁文件,而隨着我們鼠標的放置,可以在保留原有ggplot2外觀的情況下,進行plotly式的交互操作,注意上圖中我們鼠標放置點位對應顯示的懸浮標簽,其中的內容是默認的格式,即在這張ggplot2圖像中所涉及到的所有信息,在上圖中即為橫縱軸對應的數據,以及在定義形狀和顏色時使用到的分類屬性信息,如果我們想要在原有的ggplot2圖像的基礎上對文本標簽內容進行一些改變,可以利用下面的方式:
mytext <- paste("Sepal Length is ", iris$Sepal.Length, "\n" , "Sepal Width is ", iris$Sepal.Width, "\n", "Row Number: ",rownames(iris), sep="") pp <- plotly_build(p) style(pp, text=mytext, hoverinfo = "text", traces = c(1, 2, 3))
這里我們先定義mytext向量來保存每一個點我們希望其懸浮標簽中顯示的信息,接着利用plotly_build()函數(換成ggplotly()效果相同)來將原生的ggplot2圖像轉化為交互圖像,再利用style()來調整交互圖像上的懸浮標簽信息,效果如下圖所示:
可以看到懸浮標簽內的信息如我們所願,但ggplot2中的某些部件在plotly中是相沖突的,例如圖例:
p_changed <- ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width, color=Species, shape=Species)) + geom_point(size=6, alpha=0.6) + theme(legend.position = c(.83, .9)) p_changed
在上圖中我們微調了圖例的位置,但是對上圖使用ggplotly()后效果如下:
可以看到圖例並沒有得到改變,因此在實際應用中使用ggplotly()還需慎重考慮。
以上就是本文的全部內容,如有筆誤望指出。
參考資料:https://www.r-bloggers.com/get-the-best-from-ggplotly/