Javascript 我的X轴没有呈现我想要的所有刻度-D3 JS

Javascript 我的X轴没有呈现我想要的所有刻度-D3 JS,javascript,reactjs,d3.js,Javascript,Reactjs,D3.js,我的图表只按照我想要的方式工作-除了一部分。。。X轴。虽然它显示的是正确的值,但我只需要将其格式化为“M/D/Y,Time”格式并渲染每个值。现在它每6小时只渲染一次滴答声。我有所有的数据(在控制台中是“DTIME” 我所需要的就是正确设置x轴日期的格式,并实际渲染控制台中的所有日期 谢谢 以下是该文件的所有代码: class Linechart extends React.Component { constructor(props) { super(props); this.

我的图表只按照我想要的方式工作-除了一部分。。。X轴。虽然它显示的是正确的值,但我只需要将其格式化为“M/D/Y,Time”格式并渲染每个值。现在它每6小时只渲染一次滴答声。我有所有的数据(在控制台中是“DTIME”

我所需要的就是正确设置x轴日期的格式,并实际渲染控制台中的所有日期

谢谢

以下是该文件的所有代码:

class Linechart extends React.Component {
constructor(props) {
    super(props);

    this.draw_chart = this.draw_chart.bind(this);

    this.state = {}     
}

componentDidMount() {
    setTimeout(() => {

        // EARTHQUAKES FROM FETCH FROM FEED.JSX
        var parsed_quakes = (store.getState()).quake_data[0];

        // MAGNITUDE 3 QUAKES
        const mag_three = parsed_quakes.filter(quake => 
            quake.properties.mag >= 3 && quake.properties.mag < 4
        );

        // DYNAMIC FUNCTION TO PARSE QUAKES
        const mag_parse = (quakemag) => {
            // NEW OBJECT
            var mag_three_obj = new Object();
            const quake_arr = []; // STORE QUAKES OBJECTS

            var line_points = [];

            for (var i = 0; i < quakemag.length; i++) {

                // GET DATE AND TIME OF EACH MAG 3 EARTHQUAKE
                const time_stamp  = new Date(quakemag[i].properties.time);
                const string_time = time_stamp.toString();
                const mag_three_time  = new Date(string_time.split(' ').slice(1, 5)).toLocaleString();

                // DAY/TIME
                const quake_three_time = mag_three_time.split(' ');

                // MAGNITUDE
                const quake_three_mag = quakemag[i].properties.mag;             

                mag_three_obj = {
                    emag:  quake_three_mag,
                    etime: quake_three_time
                }

                var date_format  = new Date(mag_three_time);
                var milli_format = date_format.getTime();

                line_points.push([quake_three_mag, milli_format]);

                quake_arr.push(mag_three_obj);


            } // END LOOP 

            // console.log('QUAKE ARR ', quake_arr);
            // console.log('LINE POINTS ', line_points);

            // DISPATCH TO USE IN draw_chart FUNCTION
            store.dispatch({ type: 'PARSED-QUAKES', payload: quake_arr });
            return quake_arr;

        } // END MAG PARSE FUNCTION

        // PARSED MAGNITUDE THREE INVOCATION
        const parsed_mag_three = mag_parse(mag_three);      

        this.draw_chart(parsed_mag_three);

    }, 1000);           
}

// LINE CHART FUNCTION
draw_chart(data) {

    // DECLARE MARGIN AND DIMENSIONS
    var margin = {
        top: 20,
        right: 20,
        bottom: 80,
        left: 80
    }

    var width  = 1100 - margin.left - margin.right;
    var height = 500 - margin.top - margin.bottom;

    // APPEND THE SVG OJECT TO THE BODY OF THE PAGE
    // APPEND A GROUP ELEMENT AND MOVE IT TO TOP LEFT 
    var svg = d3.select('.line-graph').append('svg')
        .attr("width", width + margin.left + margin.right)
        .attr("height", height + margin.top + margin.bottom)
        .append("g")
            .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

        // GET PARSED EARTHQUAKES FROM REDUX STORE
        let parsed_quakes = (store.getState()).quake_data[0];                       

        parsed_quakes.forEach((data) => {               
            data.etime = data.etime.join(' ');
            data.emag  = data.emag;
        });

        // DEFINE THE LINE
        var value_line = d3.line()
            .x(function(d) {return x(d.etime);})
            .y(function(d) {return y(d.emag);})

        // SET THE RANGES
        var x = d3.scaleTime().range([0, width]);
        var y = d3.scaleLinear().range([height, 3]);

        // CONVERT DATES BACK TO MILLISECONDS
        data.forEach(function(el) {
            var date_format  = new Date(el.etime);
            var millis_format = date_format.getTime();

            // CONVERT THE STRING DATE/TIME FORMAT TO MILLISECONDS
            el.etime = millis_format;               
        })          

        console.log('DATA ARRAY 1ST EL ', data[0]);
        console.log('DATA ARRAY LAST EL ', data[data.length - 1]);

        // SET THE DOMAINS
        // CREATE VALUES FOR THE X AXIS FROM MIN TO MAX 
        x.domain(
            d3.extent(data, function(d) {                   
                console.log('DTIME ', d.etime);                 
                d.etime = new Date(d.etime);
                return d.etime; 
            })
        );  

        // CREATE VALUES FOR THE Y AXIS FROM MIN TO MAX 
        y.domain([3, d3.max(data, function(d) { return d.emag })]);

        svg.append('path')
            .data([data])
            .attr('class', 'line')
            .attr('d', value_line)

        // APPEND X AXIS
        svg.append('g')
            .call(d3.axisBottom(x))
            .attr('transform', 'translate(0,' + height + ')')
            .append('text')
            .attr('fill', '#E1ECA5')                
            .attr('x', 6)
            .attr('dx', '1.5em')
            .attr('dy', '2.5em')
            .attr('text-anchor', 'end')
            .attr("font-size", 16)
            .text('Time');

        // APPEND THE Y AXIS
        svg.append('g')             
            .call(d3.axisLeft(y))
            .append("text")
            .attr("fill", "#E1ECA5")
            .attr("transform", "rotate(-90)")
            .attr("y", 0)
            .attr("dy", "-2.5em")
            .attr("text-anchor", "end")
            .attr("font-size", 16)
            .text("Magnitude");

}

render() {      
    return (
        <div className='line-graph'>

        </div>
    )
}}
类折线图扩展了React.Component{
建造师(道具){
超级(道具);
this.draw\u chart=this.draw\u chart.bind(this);
this.state={}
}
componentDidMount(){
设置超时(()=>{
//来自FETCH FROM FEED.JSX的地震
var解析地震=(store.getState()).quake地震数据[0];
//三级地震
const mag_three=已解析的地震。过滤器(地震=>
quake.properties.mag>=3&&quake.properties.mag<4
);
//解析地震的动态函数
常量mag_parse=(quakemag)=>{
//新对象
var mag_three_obj=新对象();
const quake_arr=[];//存储地震对象
var line_points=[];
对于(变量i=0;i{
data.etime=data.etime.join(“”);
data.emag=data.emag;
});
//界定界线
var value_line=d3.line()
.x(函数(d){返回x(d.etime);})
.y(函数(d){返回y(d.emag);})
//设定范围
var x=d3.scaleTime().range([0,width]);
变量y=d3.scaleLinear().range([height,3]);
//将日期转换回毫秒
data.forEach(函数(el){
变量日期\格式=新日期(el.etime);
var millis_format=date_format.getTime();
//将字符串日期/时间格式转换为毫秒
el.etime=millis_格式;
})          
log('DATA ARRAY 1ST EL',DATA[0]);
log('DATA ARRAY LAST EL',DATA[DATA.length-1]);
//设置域
//为X轴创建从最小到最大的值
x、 领域(
d3.范围(数据,函数(d){
console.log('DTIME',d.etime);
d、 时间=新日期(d.etime);
返回d.etime;
})
);  
//创建Y轴从最小值到最大值的值
y、 域([3,d3.max(数据,函数(d){return d.emag})]);
append('path')
.数据([数据])
.attr('类','行')
.attr('d',值_行)
//附加X轴
append('g')
.call(d3.axisBottom(x))
.attr('transform','translate(0',+height+'))
.append('文本')
.attr('fill','E1ECA5')
.attr('x',6)
.attr('dx','1.5em'))
.attr('dy','2.5em'))
.attr('text-anchor','end')
.attr(“字体大小”,16)
.文本(“时间”);
//附加Y轴
append('g')
.呼叫(d3.左(y))
.append(“文本”)
.attr(“填充”和“#E1ECA5”)
.attr(“变换”、“旋转(-90)”)
.attr(“y”,0)
.attr(“dy”,“2.5em”)
.attr(“文本锚定”、“结束”)
.attr(“字体大小”,16)
.文本(“幅度”);
}
render(){
返回(
)
}}

创建轴时,可以使用两种方法:

  • 格式化日期
  • 指定勾号的频率
    var axis = d3.axisBottom(x) 
      .ticks(d3.timeDay.every(1))           // a tick for every day.
      .tickFormat(d3.timeFormat("%d/%m/%y"));  // date in format: 31/01/19