准备一维数据 n 个数据元素 计算最大值,最小值、均值、标准差、以及直方图分组
import numpy as np
data = list ( )
for i in range ( 640 ) : data. append( np. random. normal( 1 ) )
print ( data) z = np. histogram( data, bins= 64 )
print ( list ( z[ 0 ] ) )
z1 = list ( z[ 1 ] )
z1 = [ round ( x, 3 ) for x in z1]
print ( z1)
print ( np. min ( z[ 1 ] ) )
print ( np. max ( z[ 1 ] ) )
print ( np. mean( z[ 1 ] ) )
print ( np. std( z[ 1 ] ) )
<! DOCTYPE HTML >
< html> < head> < style type = " text/css" > #main { height : 500px; border : 1px red solid; width : 100%; } #main1 { height : 500px; border : 1px red solid; width : 100%; } #main2 { height : 500px; border : 1px red solid; width : 100%; } #box1 { border : 1px #E8E8E8 solid; overflow : hidden; float : left; width : 99%; } #box2 { border : 1px #E8E8E8 solid; overflow : hidden; float : right; width : 49%; } #box4 { border : 1px #E8E8E8 solid; height : 550px; } .child { height : 330px; width : 49%; border : 1px #778899 solid; float : left; } .child1 { height : 330px; width : 49%; border : 1px #778899 solid; float : right; } .top { width : 99%; text-align : center; margin-top : 20px; float : left; } .mid { border : 1px black solid; float : left; margin-top : 10px; width : 100%; } </ style> < script src = " https://cdn.bootcss.com/jquery/1.12.0/jquery.min.js" > </ script> < script src = " https://cdn.bootcss.com/echarts/3.0.2/echarts.min.js" > </ script> < script type = " text/javascript" > function fun ( x, u, a ) { return ( 1 / Math. sqrt ( 2 * Math. PI ) * a) * Math. exp ( - 1 * ( ( x - u) * ( x - u) ) / ( 2 * a * a) ) ; } function addParam ( arr, target ) { var flag = false ; var target = parseFloat ( target) ; if ( target < parseFloat ( arr[ 0 ] ) ) { arr. unshift ( target. toString ( ) ) ; return arr; } if ( target > parseFloat ( arr[ arr. length - 1 ] ) ) { arr. push ( target. toString ( ) ) ; return arr; } for ( var i = 0 ; i < arr. length; i++ ) { if ( parseFloat ( arr[ i] ) > target) { if ( arr[ i - 1 ] == target) flag = true ; break ; } } if ( flag) { return arr; } else { arr. splice ( i, 0 , target. toString ( ) ) ; return arr; } } function getTop ( arr ) { var maxIndex = 0 ; for ( var i = 0 ; i < arr. length; i++ ) { maxIndex = parseFloat ( arr[ i] ) > parseFloat ( arr[ maxIndex] ) ? i : maxIndex; } return parseFloat ( arr[ maxIndex] ) ; } function getParam ( low, mean, up, top ) { var res = { } ; res[ 'low' ] = low; res[ 'mean' ] = mean; res[ 'up' ] = up; res[ 'top' ] = top; return res; } $ ( function ( ) { var myChart1 = echarts. init ( document. getElementById ( 'box1' ) ) ; var datas = [ { "data" : { "boxplot" : { "q1" : "0.28" , "q3" : "0.88" , "median" : "0.8" , "mean" : "0.859" , "lower" : "0" , "upper" : "0.9188" } , "stdplot" : { "xaxis" : "-2.387, -2.287, -2.187, -2.087, -1.986, -1.886, -1.786, -1.685, -1.585, -1.485, -1.384, -1.284, -1.184, -1.083, -0.983, -0.883, -0.782, -0.682, -0.582, -0.481, -0.381, -0.281, -0.18, -0.08, 0.02, 0.121, 0.221, 0.321, 0.422, 0.522, 0.622, 0.723, 0.823, 0.923, 1.024, 1.124, 1.224, 1.325, 1.425, 1.525, 1.625, 1.726, 1.826, 1.926, 2.027, 2.127, 2.227, 2.328, 2.428, 2.528, 2.629, 2.729, 2.829, 2.93, 3.03, 3.13, 3.231, 3.331, 3.431, 3.532, 3.632, 3.732, 3.833, 3.933, 4.033" , "mean" : "0.8228 " , "lower" : "-2.387" , "upper" : "4.0332" , "yaxis" : "1, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 0, 2, 5, 7, 8, 7, 12, 5, 13, 9, 7, 13, 15, 14, 16, 17, 29, 17, 30, 28, 29, 27, 20, 22, 28, 29, 23, 27, 24, 16, 19, 13, 18, 12, 14, 11, 13, 3, 7, 7, 3, 0, 4, 2, 0, 0, 3, 0, 1, 1, 1, 2, 1" , "stdev" : "0.822" } } , "idx" : 1 } , ] ; for ( var i = 0 ; i < datas. length; i++ ) { $ ( "#box1" ) . append ( "<div class='mid'></div>" ) $ ( "#box1" ) . append ( "<div class='top' id='" + "top" + i + "'><h2>簇_" + datas[ i] . idx + "</h2></div>" ) $ ( "#box1" ) . append ( "<div class='child' id='" + "child" + i + "'></div>" ) var myChart = echarts. init ( document. getElementById ( "child" + i) ) ; var testData = [ ] ; var data = [ ] ; data. push ( datas[ i] . data. boxplot. lower) ; data. push ( datas[ i] . data. boxplot. q1) ; data. push ( datas[ i] . data. boxplot. median) ; data. push ( datas[ i] . data. boxplot. q3) ; data. push ( datas[ i] . data. boxplot. upper) ; testData. push ( data) ; var xdata = [ datas[ i] . idx] ; var option = { title : [ { text : 'upper: Q3 + 1.5 * IRQ \nlower: Q1 - 1.5 * IRQ' , borderColor : '#999' , borderWidth : 1 , textStyle : { fontSize : 14 } , left : '10%' , top : '85%' } ] , tooltip : { trigger : 'item' , axisPointer : { type : 'shadow' } } , grid : { left : '15%' , right : '15%' , bottom : '23%' , } , xAxis : { type : 'category' , data : xdata, boundaryGap : true , nameGap : 30 , splitArea : { } , axisLabel : { show : true , color : 'black' , } , splitLine : { show : true , lineStyle : { type : 'dashed' , } , } , axisLine : { show : true , lineStyle : { width : 2 , color : 'black' , } , } , axisTick : { show : true , } } , yAxis : { type : 'value' , splitArea : { } , axisLabel : { show : true , color : 'black' , } , splitLine : { show : true , lineStyle : { type : 'dashed' } , } , axisLine : { show : true , lineStyle : { width : 2 , color : 'black' , } , } , } , series : [ { name : 'boxplot' , type : 'boxplot' , itemStyle : { borderColor : 'blue' , } , data : testData, tooltip : { formatter : function ( param ) { return [ '簇名: ' + param. name, '上边缘: ' + param. data[ 5 ] , '上四分位数: ' + param. data[ 4 ] , '中位数: ' + param. data[ 3 ] , '下四分位数: ' + param. data[ 2 ] , '下边缘: ' + param. data[ 1 ] ] . join ( '<br/>' ) } } } ] } ; myChart. setOption ( option) ; $ ( "#box1" ) . append ( "<div class='child1' id='" + "child1" + i + "'></div>" ) var myChart = echarts. init ( document. getElementById ( "child1" + i) ) ; var yArr = [ ] ; var xArr = [ ] ; var mean = parseFloat ( datas[ i] . data. stdplot. mean) ; var stdev = parseFloat ( datas[ i] . data. stdplot. stdev) ; var x = datas[ i] . data. stdplot. xaxis. split ( ',' ) ; var y = datas[ i] . data. stdplot. yaxis. split ( ',' ) var low = mean - 3 * stdev; var up = mean + 3 * stdev; x = addParam ( x, low. toFixed ( 0 ) . toString ( ) ) ; x = addParam ( x, mean. toFixed ( 0 ) . toString ( ) ) ; x = addParam ( x, up. toFixed ( 0 ) . toString ( ) ) ; var top = ( 1 / Math. sqrt ( 2 * Math. PI ) * stdev) ; var mar = getParam ( low. toFixed ( 0 ) . toString ( ) , mean. toFixed ( 0 ) . toString ( ) , up. toFixed ( 0 ) . toString ( ) , top) ; for ( var j = 0 ; j < x. length; j++ ) { var res = fun ( x[ j] , mean, stdev) . toFixed ( 2 ) ; yArr. push ( res) ; } var colors = [ '#7CCD7C' , '#d14a61' , '#675bba' ] ; var option = { color : colors, tooltip : { trigger : 'axis' , axisPointer : { type : 'cross' } } , grid : { right : '20%' } , toolbox : { feature : { dataView : { show : true , readOnly : false } , restore : { show : true } , saveAsImage : { show : true } } } , legend : { data : [ '原数据频率' , '正态分布' ] } , xAxis : [ { type : 'category' , axisTick : { alignWithLabel : true } , data : x} ] , yAxis : [ { type : 'value' , name : '频率' , position : 'right' , axisLine : { lineStyle : { color : colors[ 1 ] } } , axisLabel : { formatter : '{value}' } } , { type : 'value' , position : 'left' , axisLine : { lineStyle : { color : colors[ 0 ] } } , axisLabel : { formatter : '{value}' } } ] , series : [ { name : '原数据频率' , type : 'bar' , yAxisIndex : 1 , data : y} , { name : '正态分布' , type : 'line' , smooth : true , yAxisIndex : 0 , data : yArr} , { name : '平行于y轴的趋势线' , type : 'line' , markLine : { itemStyle : { color : '#000' , normal : { lineStyle : { width : 1 , type : 'solid' , } , label : { show : false , position : 'end' , color : 'black' , formatter : function ( params ) { str = "-3μ" ; return str} , } } } , name : 'aa' , data : [ [ { coord : [ mar. low, 0 ] } , { coord : [ mar. low, mar. top] } ] ] } } , { name : '平行于y轴的趋势线' , type : 'line' , markLine : { itemStyle : { color : '#000' , normal : { lineStyle : { width : 2 , type : 'solid' , } , label : { show : true , position : 'end' , color : 'black' , formatter : function ( params ) { str = "MEAN" ; return str} , } } } , name : 'bb' , data : [ [ { coord : [ mar. mean, 0 ] } , { coord : [ mar. mean, mar. top] } ] ] } } , { name : '平行于y轴的趋势线' , type : 'line' , markLine : { itemStyle : { color : '#000' , normal : { lineStyle : { width : 2 , type : 'solid' , } , label : { show : true , position : 'end' , color : 'black' , formatter : function ( params ) { str = "3μ" ; return str} , } } } , name : 'cc' , yAxisIndex : 0 , data : [ [ { coord : [ mar. up, 0 ] } , { coord : [ mar. up, mar. top] } ] ] } } , ] } ; myChart. setOption ( option) ; } } ) ; </ script> </ head> < body> < div> < div id = " box1" > </ div> </ div> </ body>
</ html>