如何在react-native中實現餅圖和環形圖——victory基礎教程

查看github原文
如有錯誤請在評論區指出~

前言。。和一些關于repo起名的建議

在github上找了很多圖表類的插件,大多都是直方圖之類的顯示完好,到了餅圖都差強人意。因為react-native版本更新的快,用不同的版本必須適配不同的第三方庫,所以很多repo維護的都比較慢(或者類似于react-native-chart就直接不更新了),如果你非得用某個第三方庫,在你當前版本不適合的情況下,要么換庫,要么就降級react-native版本。這導致在開發上非常棘手,因為是團隊項目,不可能去降級react-native版本的啊,在找適合的第三方庫的過程中也是一度陷入了絕望之中。直到在react-native-chart的readme中發現了victory-native。這里,我不得不吐槽一下他的repo名,victory什么鬼啊,沒用過你家react-victory的人真心不知道你是干啥的。

這啥子命名哦!摔!錯誤的命名示例

說句題外話,如果自己有repo的小伙伴一定要重視你的項目命名,最好把它的功能用命名的方式描述出來,然后詳細寫下description,這樣才能提高star數,(來自一個剛剛參透這些道理并且寫了不少repo,star數扔為0的老阿姨的忠告)。如果你經常從github上找三方庫你就會發現,star數很高的項目基本上都是文檔詳盡,description寫的很清楚的一些項目。拿react-native-chart舉例,雖然也是個不錯的repo,但已經不能滿足當前的react-native版本了,比起victory-native還是有很多不足的地方,但是他的star數要比victory-native高一倍。起個名字還是關系著命運啊,就像王勝利王.我會做圖表一樣,你會找誰做圖表呢。。

react-native-chart,想有star就該這樣命名

先看效果圖

demo

安裝victory-native

首先,先要安裝react-native-svg,對應你的react-native版本號進行安裝。

react-native-svg >= 3.2.0 only supports react-native >= 0.29.0
react-native-svg >= 4.2.0 only supports react-native >= 0.32.0
react-native-svg >= 4.3.0 only supports react-native >= 0.33.0
react-native-svg >= 4.4.0 only supports react-native >= 0.38.0 and react >= 15.4.0
react-native-svg >= 4.5.0 only supports react-native >= 0.40.0 and react >= 15.4.0
react-native-svg >= 5.1.8 only supports react-native >= 0.44.0 and react == 16.0.0-alpha.6
react-native-svg >= 5.2.0 only supports react-native >= 0.45.0 and react == 16.0.0-alpha.12
react-native-svg >= 5.3.0 only supports react-native >= 0.46.0 and react == 16.0.0-alpha.12
react-native-svg >= 5.4.1 only supports react-native >= 0.47.0 and react == 16.0.0-alpha.12
react-native-svg >= 5.5.1 only supports react-native >= 0.50.0 and react == 16.0.0

之后link一下

react-native link react-native-svg

重新打包安裝

react-native run-ios
// or
react-native run-android

然后安裝victory-native

yarn add victory-native

使用

先引入,這里只討論餅圖,不過很多參數都是共同的,其他的見官方文檔

import {
  VictoryPie,
  VictoryLegend,
} from 'victory-native';

使用組件

<VictoryPie
            padding={{ top: 0, left: 0 }}
            colorScale={colorScale}
            data={[
              { x: '凈值', y: 35 },
              { x: '已用', y: 40 },
              { x: '可用', y: 55 },
              { x: '總盈虧', y: 55 },
            ]}
            innerRadius={px2dp(75)}
            height={256}
            width={256}
            labels={() => ''}
          />

參數

這里寫的參數只是基礎的幾個,想要進行擴展去看下官方文檔,寫的非常詳盡。

data

類似于json形式,x代表數據的類型,y是數據的值;也可以是純數組的形式。

colorScale

這個參數指每個類型的顏色,是一組數組,順序按照data中給出的順序。如:

const colorScale = ['tomato', 'orange', 'gold', 'navy'];

innerRadius

指的是圓形中間的圓半徑大小。如果設置為0就是一個純餅圖。

height,width

設置整個svg的大小,不設置默認為填充父組件。

labels

標簽名,將data進行處理后渲染到圖中。因為需求中不顯示標簽名,所以設置為()=>{}

<VictoryPie
  data={sampleData}
  labels={(d) => `y: ${d.y}`}
/>

padding

內邊距大小。這個屬性默認并不為0,所以會在分辨率不同的設備上顯示不一,建議設置為0,然后在整個組件外部包個View進行顯示。

圖例

<VictoryLegend
              padding={{ top: 0, left: 0 }}
              title=""
              orientation="vertical"
              style={{ labels: { fontSize: sizes.f2 } }}
              gutter={px2dp(25)}
              data={[
                {
                  name: '凈值',
                  symbol: { fill: 'tomato', type: 'square' },
                },
                {
                  name: '已用',
                  symbol: { fill: 'orange', type: 'square' },
                },
                {
                  name: '可用',
                  symbol: { fill: 'gold', type: 'square' },
                },
                { name: '總盈虧', symbol: { fill: 'navy', type: 'square' } },
              ]}
              width={px2dp(150)}
            />

參數

title

整個圖例的名字。如title='圖例'

data

類似于json的數據結構,包含圖例名(name),和圖例樣式(type)以及圖例顏色(fill)。

gutter

指的是每條圖例之間的間距。

orientation

圖例的排列方式。橫排或縱排。

參考資料

  1. react-native-svg repo 地址
  2. victory-native repo 地址
  3. victory官方文檔
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,546評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,570評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,505評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,017評論 1 313
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,786評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,219評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,287評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,438評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,971評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,796評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,995評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,540評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,230評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,918評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,697評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374