1 2 package com.github.mikephil.charting.data; 3 4 import com.github.mikephil.charting.charts.ScatterChart; 5 import com.github.mikephil.charting.interfaces.datasets.IScatterDataSet; 6 import com.github.mikephil.charting.renderer.scatter.ChevronDownShapeRenderer; 7 import com.github.mikephil.charting.renderer.scatter.ChevronUpShapeRenderer; 8 import com.github.mikephil.charting.renderer.scatter.CircleShapeRenderer; 9 import com.github.mikephil.charting.renderer.scatter.CrossShapeRenderer; 10 import com.github.mikephil.charting.renderer.scatter.IShapeRenderer; 11 import com.github.mikephil.charting.renderer.scatter.SquareShapeRenderer; 12 import com.github.mikephil.charting.renderer.scatter.TriangleShapeRenderer; 13 import com.github.mikephil.charting.renderer.scatter.XShapeRenderer; 14 import com.github.mikephil.charting.utils.ColorTemplate; 15 16 import java.util.ArrayList; 17 import java.util.List; 18 19 public class ScatterDataSet extends LineScatterCandleRadarDataSet<Entry> implements IScatterDataSet { 20 21 /** 22 * the size the scattershape will have, in density pixels 23 */ 24 private float mShapeSize = 15f; 25 26 /** 27 * Renderer responsible for rendering this DataSet, default: square 28 */ 29 protected IShapeRenderer mShapeRenderer = new SquareShapeRenderer(); 30 31 /** 32 * The radius of the hole in the shape (applies to Square, Circle and Triangle) 33 * - default: 0.0 34 */ 35 private float mScatterShapeHoleRadius = 0f; 36 37 /** 38 * Color for the hole in the shape. 39 * Setting to `ColorTemplate.COLOR_NONE` will behave as transparent. 40 * - default: ColorTemplate.COLOR_NONE 41 */ 42 private int mScatterShapeHoleColor = ColorTemplate.COLOR_NONE; 43 ScatterDataSet(List<Entry> yVals, String label)44 public ScatterDataSet(List<Entry> yVals, String label) { 45 super(yVals, label); 46 } 47 48 @Override copy()49 public DataSet<Entry> copy() { 50 List<Entry> entries = new ArrayList<Entry>(); 51 for (int i = 0; i < mEntries.size(); i++) { 52 entries.add(mEntries.get(i).copy()); 53 } 54 ScatterDataSet copied = new ScatterDataSet(entries, getLabel()); 55 copy(copied); 56 return copied; 57 } 58 copy(ScatterDataSet scatterDataSet)59 protected void copy(ScatterDataSet scatterDataSet) { 60 super.copy(scatterDataSet); 61 scatterDataSet.mShapeSize = mShapeSize; 62 scatterDataSet.mShapeRenderer = mShapeRenderer; 63 scatterDataSet.mScatterShapeHoleRadius = mScatterShapeHoleRadius; 64 scatterDataSet.mScatterShapeHoleColor = mScatterShapeHoleColor; 65 } 66 67 /** 68 * Sets the size in density pixels the drawn scattershape will have. This 69 * only applies for non custom shapes. 70 * 71 * @param size 72 */ setScatterShapeSize(float size)73 public void setScatterShapeSize(float size) { 74 mShapeSize = size; 75 } 76 77 @Override getScatterShapeSize()78 public float getScatterShapeSize() { 79 return mShapeSize; 80 } 81 82 /** 83 * Sets the ScatterShape this DataSet should be drawn with. This will search for an available IShapeRenderer and set this 84 * renderer for the DataSet. 85 * 86 * @param shape 87 */ setScatterShape(ScatterChart.ScatterShape shape)88 public void setScatterShape(ScatterChart.ScatterShape shape) { 89 mShapeRenderer = getRendererForShape(shape); 90 } 91 92 /** 93 * Sets a new IShapeRenderer responsible for drawing this DataSet. 94 * This can also be used to set a custom IShapeRenderer aside from the default ones. 95 * 96 * @param shapeRenderer 97 */ setShapeRenderer(IShapeRenderer shapeRenderer)98 public void setShapeRenderer(IShapeRenderer shapeRenderer) { 99 mShapeRenderer = shapeRenderer; 100 } 101 102 @Override getShapeRenderer()103 public IShapeRenderer getShapeRenderer() { 104 return mShapeRenderer; 105 } 106 107 /** 108 * Sets the radius of the hole in the shape (applies to Square, Circle and Triangle) 109 * Set this to <= 0 to remove holes. 110 * 111 * @param holeRadius 112 */ setScatterShapeHoleRadius(float holeRadius)113 public void setScatterShapeHoleRadius(float holeRadius) { 114 mScatterShapeHoleRadius = holeRadius; 115 } 116 117 @Override getScatterShapeHoleRadius()118 public float getScatterShapeHoleRadius() { 119 return mScatterShapeHoleRadius; 120 } 121 122 /** 123 * Sets the color for the hole in the shape. 124 * 125 * @param holeColor 126 */ setScatterShapeHoleColor(int holeColor)127 public void setScatterShapeHoleColor(int holeColor) { 128 mScatterShapeHoleColor = holeColor; 129 } 130 131 @Override getScatterShapeHoleColor()132 public int getScatterShapeHoleColor() { 133 return mScatterShapeHoleColor; 134 } 135 getRendererForShape(ScatterChart.ScatterShape shape)136 public static IShapeRenderer getRendererForShape(ScatterChart.ScatterShape shape) { 137 138 switch (shape) { 139 case SQUARE: 140 return new SquareShapeRenderer(); 141 case CIRCLE: 142 return new CircleShapeRenderer(); 143 case TRIANGLE: 144 return new TriangleShapeRenderer(); 145 case CROSS: 146 return new CrossShapeRenderer(); 147 case X: 148 return new XShapeRenderer(); 149 case CHEVRON_UP: 150 return new ChevronUpShapeRenderer(); 151 case CHEVRON_DOWN: 152 return new ChevronDownShapeRenderer(); 153 } 154 155 return null; 156 } 157 } 158